Contar a partir do zero é uma prática muito comum em muitas linguagens de computador, mas por quê? Continue lendo enquanto exploramos o fenômeno e por que ele é tão difundido.
A sessão de perguntas e respostas de hoje chega até nós como cortesia do SuperUser - uma subdivisão do Stack Exchange, um grupo de sites de perguntas e respostas voltado para a comunidade
A questão
O leitor SuperUser DragonLord está curioso para saber por que a maioria dos sistemas operacionais e linguagens de programação contam a partir do zero. Ele escreve:
Os computadores tradicionalmente registram valores numéricos a partir de zero. Por exemplo, matrizes em linguagens de programação baseadas em C começam do índice zero.
Que razões históricas existem para isso, e quais vantagens práticas contar do zero tem sobre contar a partir 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 contribuidor do SuperUser Matteo oferece os seguintes insights:
Contar 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 (é chamada de endereço), a posição de cada elemento pode ser calculada como
elemento (n) = endereço + n * size_of_the_elementSe você considerar o primeiro elemento o primeiro, o cálculo se torna
elemento (n) = endereço + (n-1) * size_of_the_elementNão é uma grande diferença, mas adiciona uma subtração desnecessária para cada acesso.
Editado para adicionar:
- O uso do índice da 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 fazer referência ao elemento.
- Dijkstra publicou um artigo “Por que a numeração deve começar do zero” ( pdf ), onde ele explica por que começar com 0 é uma escolha melhor. Começar do zero permite uma melhor representação dos intervalos.
Se você deseja se aprofundar na resposta, o artigo 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 .