Pagina inicial » como » Por que os computadores contam a partir do zero?

    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.