Por que os computadores contam a partir do zero?
Contar a partir do zero é uma prática muito comum em muitas linguagens de computador, mas por quê? Leia sobre como nós exploramos o fenômeno e porque é tão difundido.
A sessão de perguntas e respostas de hoje nos é oferecida por cortesia do SuperUser - uma subdivisão do Stack Exchange, um agrupamento de sites de perguntas e respostas conduzido pela comunidade..
A questão
Leitor de SuperUsuário O DragonLord está curioso sobre o motivo pelo qual a maioria dos sistemas operacionais e linguagens de programação contam a partir de zero. Ele escreve:
Computadores tradicionalmente calculam valores numéricos a partir de zero. Por exemplo, matrizes em linguagens de programação baseadas em C começam do zero.
Que razões históricas existem para isso, e que vantagens práticas a contagem do zero tem de contar de um?
Por que de fato? Por mais difundida que seja a prática, certamente existem razões práticas para sua implementação.
A resposta
O colaborador do SuperUser, Matteo, oferece os seguintes insights:
A contagem de matrizes de 0 simplifica o cálculo do endereço de memória de cada elemento.
Se uma matriz é armazenada em uma determinada posição na memória (ela é chamada de endereço), a posição de cada elemento pode ser calculada como
elemento (n) = endereço + n * tamanho_do_elemento
Se você considerar o primeiro elemento o primeiro, o cálculo se torna
elemento (n) = endereço + (n-1) * tamanho_do_elemento
Não é uma diferença enorme, mas adiciona uma subtração desnecessária para cada acesso.
Editado para adicionar:
- O uso do índice de matriz como um deslocamento não é um requisito, mas apenas um hábito. O deslocamento do primeiro elemento pode ser oculto pelo sistema e levado em consideração ao alocar e referenciar o elemento.
- Dijkstra publicou um artigo “Por que a numeração deve começar no zero” (pdf), onde ele explica por que começar com 0 é uma escolha melhor. Começar no zero permite uma melhor representação dos intervalos.
Se você está procurando aprofundar a resposta, o artigo de Dijkstra é uma leitura informativa.
Tem algo a acrescentar à explicação? Soe fora nos comentários. Quer ler mais respostas de outros usuários do Stack Exchange com experiência em tecnologia? Confira o tópico de discussão completo aqui.