Contar desde cero es una práctica muy común en muchos lenguajes informáticos, pero ¿por qué? Siga leyendo mientras exploramos el fenómeno y por qué está tan extendido.
La sesión de preguntas y respuestas de hoy nos llega por cortesía de SuperUser, una subdivisión de Stack Exchange, una agrupación de sitios web de preguntas y respuestas impulsada por la comunidad.
La pregunta
El lector SuperUser DragonLord siente curiosidad por saber por qué la mayoría de los sistemas operativos y lenguajes de programación cuentan desde cero. El escribe:
Las computadoras tradicionalmente cuentan los valores numéricos comenzando desde cero. Por ejemplo, las matrices en lenguajes de programación basados en C comienzan desde el índice cero.
¿Qué razones históricas existen para esto y qué ventajas prácticas tiene contar desde cero sobre contar desde uno?
¿Por qué de hecho? Por muy extendida que esté la práctica, seguramente existen razones prácticas para su implementación.
La respuesta
El colaborador de superusuario Matteo ofrece las siguientes ideas:
Contar matrices desde 0 simplifica el cálculo de la dirección de memoria de cada elemento.
Si una matriz se almacena en una posición determinada en la memoria (se llama dirección), la posición de cada elemento se puede calcular como
elemento (n) = dirección + n * tamaño_del_elementoSi considera que el primer elemento es el primero, el cálculo se convierte en
elemento (n) = dirección + (n-1) * tamaño_del_elementoNo es una gran diferencia, pero agrega una resta innecesaria para cada acceso.
Editado para agregar:
- El uso del índice de matriz como compensación no es un requisito, sino solo un hábito. El sistema podría ocultar el desplazamiento del primer elemento y tenerlo en cuenta al asignar y hacer referencia al elemento.
- Dijkstra publicó un artículo "Por qué la numeración debería comenzar en cero" ( pdf ) donde explica por qué comenzar con 0 es una mejor opción. Comenzar en cero permite una mejor representación de los rangos.
Si está buscando profundizar en la respuesta, el documento de Dijkstra es una lectura informativa.
¿Tiene algo que agregar a la explicación? Habla en los comentarios. ¿Quieres leer más respuestas de otros usuarios de Stack Exchange expertos en tecnología? Consulte el hilo de discusión completo aquí .