Questão Por que os computadores contam a partir de zero?


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 de zero tem mais que contar de uma?

Nota: Esta pergunta pede respostas técnicas bem explicadas, não meras opiniões, e destina-se a cobrir computadores em geral, em vez de apenas programar. Esta questão expande a questão dos programadores "Por que as estruturas / matrizes são baseadas em zero?".


55


origem


Opinião de Djkstra - Bakuriu
Houve mais do que alguns exemplos de linguagens de computador que usaram matrizes de 1 origem. - Daniel R Hicks
Por que os humanos não contam de 0? - Untitled
Woah, woah, ninguém conta do zero, nós índice de zero. Ninguém diz o elemento "zeroth". Nós dizemos que o "primeiro" elemento índice 0. Pense no índice como o quanto um elemento é deslocado da primeira posição. Bem, o primeiro elemento está na primeira posição, por isso não é compensado de forma alguma, portanto, seu índice é 0. O segundo elemento como um elemento antes dele, portanto, é o elemento deslocamento 1 e está no índice 1 - mowwwalker
@Ramhound Não, não é. A indexação baseada em zero é completamente não relacionada ao uso de binário. - Peter Olson


Respostas:


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 (é chamada de endereço), a posição de cada elemento pode ser computada como

element(n) = address + n * size_of_the_element

Se você considerar o primeiro elemento o primeiro, o cálculo se torna

element(n) = address + (n-1) * size_of_the_element

Não é muito diferente, mas adiciona uma subtração desnecessária para cada acesso.

Editar

  • 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 referenciar o elemento.

  • Dijkstra publicou um artigo "Por que a numeração deve começar em zero" (pdf) onde ele explica porque começar com 0 é uma escolha melhor. Começar no zero permite uma melhor representação dos intervalos.


87



+1 para resposta correta. Note que a indexação baseada em 0 é apenas um (muito comum) convenção da linguagem utilizada; não é universal. Por exemplo, Lua usa indexação baseada em 1. A "subtração desnecessária" pode ter sido o raciocínio por trás da indexação baseada em 0 nos velhos tempos, mas agora a maioria das linguagens a usa simplesmente porque é o que todo mundo já está acostumado (em grande parte graças ao C)e não há motivo para mudar essa convenção. - BlueRaja - Danny Pflughoeft
Isso não faz sentido. A posição de cada elemento sempre pode ser computada como address + n * size_of_element contanto que o "endereço" seja o endereço do elemento zeroth. Isso funciona perfeitamente se o elemento zeroth existe como um elemento da matriz ou não. A questão é por que o elemento zeroth existe, não porque nós armazenamos endereços como o endereço do elemento zeroth (possivelmente nocional). (Que isso responde.) - David Schwartz
@DavidSchwartz Vamos dar uma velho linguagem como C. Se alocar memória, você obtém um endereço onde a memória é iniciada. Se um compilador vê algo como v[n] tem que calcular o endereço da expressão. Se os índices começarem com 0, o cálculo será v + x *. Se em 1 o cálculo for v + (x-1) * size. Por exemplo, v [1] corresponderá a v + (1-1) * tamanho que é v. - Matteo
@ David: em C (a linguagem que realmente popularizou a indexação baseada em 0), arrays e ponteiros são amplamente intercambiáveis, então é importante por uma série de razões que *array na verdade se refere ao primeiro elemento. Um exemplo: se tivermos array apontar para o local da memória antes o primeiro elemento, lançando para uma matriz de um tipo diferente seria problemático, por exemplo. a posição do segundo byte em uma matriz de ints se tornaria dependente do tamanho da palavra; em uma máquina de 32 bits, seria no ((char*)intArray + 5)!! - BlueRaja - Danny Pflughoeft
Não, isso não é um problema se o array tem um elemento zeroth. Porque, você vê, também há escala. Se eu tiver uma matriz de objetos de 8 bytes, e eu sobrepor isso com uma matriz de bytes, qual é o índice de bytes do objeto [42]? Por que é simples: 42 * 8. O problema com base 1 é que esse deslocamento de 1 é 1 byte quando eu olho para a matriz de byte, e é 8 bytes quando eu olho para a matriz de 8 bytes de bytes sobreposta. - Kaz


Embora os princípios abaixo se apliquem tanto a decimal como a qualquer outra base, a contagem de 0 em computadores pode ser facilmente entendida naturalmente a partir do sistema binário de dígitos fixos de representar números usados ​​em computadores. Se você tem 8 bits, então existem 256 combinações possíveis de 1s e 0s que podem ser expressas. Você poderia usar esses 8 bits para expressar os números de 1 a 255, mas isso deixaria de fora 0, o que é útil na matemática como um número em si e, por isso, eles são usados ​​para expressar os números 0-255.

Isso já define um precedente de uma ordem natural começando de 0 (todos os 0s na representação binária) a 255 (todos os 1's em um número de 8 bits). Considerando o sistema de representação de números, a partir de 0 faz sentido porque 0 é o número "primeiro" no sistema, então 1 é o número "segundo" e assim por diante.

Uma razão adicional pela qual começar de 0 em computadores é tão conveniente é devido ao conceito de offsets. Um deslocamento é um número que representa a distância de um local na memória ou no disco rígido ou qualquer outro meio "endereçável". Em computadores, praticamente todos os dados são armazenados linearmente, o que significa que há uma ordem para os dados, um primeiro byte, um segundo byte, etc. É conveniente expressar a localização de "áreas" de dados por meio de um deslocamento. Qual é o primeiro byte em um bloco de dados? Está no deslocamento '0', o que significa que é encontrado 0 bytes após o primeiro byte no bloco de dados. Embora seja possível designar "1" o primeiro byte, isso cria complicações na representação dos dados por diversos motivos:

  • Com a exclusão de 0 de ser usado para endereçar dados, você reduz o número de coisas que você pode endereçar com um número de 8 bits em um.
  • Para calcular o deslocamento, que é necessário no nível de hardware de acesso a dados, em algum momento você precisa subtrair um da numeração, o que introduz uma complexidade.
  • Ponteiros para um bloco de dados sempre apontam para o primeiro bloco, então a aritmética é direta quando você começa a partir de 0. (ou seja, o primeiro byte no primeiro bloco do primeiro cluster de dados é 0 + 0 + 0 quando você começa de 0 , é 1 + 1 + 1 - 1 -1 quando você começa de 1.) A aritmética para isso quando você começa a partir de 1 com estruturas de dados aninhadas como este exemplo pode ser confusa.

37



Não tem nada a ver com representação binária. Os números binários e decimais começam em 0. - Matteo
Se você começar a contar a partir de 0, você não reduzirá o número de endereços que você poderia (em teoria) passar de 1 para 257. - Matteo
@Matteo não em um único byte você não poderia - OrangeDog
@Dougvj A contagem baseada em zero tem absolutamente nada fazer com binário. O ponto que você está fazendo é sobre o uso de cada número em uma representação de dígitos fixos, o que é uma preocupação, independentemente de você estar usando a base 2, a base 10 ou a base 23517. - Peter Olson
-1 Não tem absolutamente nada a ver com representação binária. - BlueRaja - Danny Pflughoeft


Nunca pensei que uma oportunidade para um filósofo de poltrona como eu aparecesse no Superusuário. Há um equívoco fundamental no coração aqui, porque os não-filósofos tendem a pular os mínimos detalhes. Em resumo:  Os computadores não contam a partir de zero, mas a denominação de posições começa em zero.

Não há nada de confuso sobre essa inconsistência percebida entre o computador e as técnicas de contagem humana (qualquer). Vamos decompor a pergunta.

Por que os computadores contam a partir de zero?

  • Eles não contam de zero

Os computadores calculam os valores a partir do zero. Por exemplo, matrizes em C.

  • o índice (indicador de posição, contagem) começa em zero. o contagem de elementos em uma matriz onde há um único elemento no índice zero é 1

Zero é prático para representar um vazio de algo ou o ponto médio de uma escala. Não é prático para contando qualquer coisa porque é impossível por definição de zero.

No mesmo sentido que o ponto central de uma escala, o zero pode ser usado para representar a própria borda (começo absoluto) de uma coleção. A questão não tem sentido porque é inconsistente entre "valores de contagem" e "contagem de zero".

Então, sim, os computadores calculam a partir do zero, mas contam a partir de um. As duas palavras têm significados diferentes.

tal·ly [tal-ee]

substantivo

  1. uma conta ou acerto de contas; um registro de débito e crédito, da pontuação de um jogo ou algo semelhante.
  2. qualquer coisa em que uma pontuação ou conta é mantida.
  3. um número ou grupo de itens registrados.

contagem [kount]

verbo (usado com objeto)

  1. para verificar (as unidades separadas ou grupos de uma coleção) um por um para determinar o número total; adicionar; Enumerar: Ele contou seus ingressos e descobriu que tinha dez.
  2. calcular; calcular; calcular.
  3. listar ou nomear os numerais até: Feche os olhos e conte dez.

(dictionary.com)


As razões práticas são adequadamente descritas por Dougvj, não tenho nada a acrescentar lá. Se pudéssemos ter um professor de CS (dos anos 60) para dar uma conta histórica ...


26



Na verdade, como você sabe onde o computador inicia alguma coisa? Tudo o que você sabe é que, quando você o usa, você diz para começar do zero. - Daniel R Hicks
Estou falando de definições de conceitos e lógica aqui, não como os computadores funcionam em si. Eu sei um pouco sobre onde os computadores iniciam qualquer coisa porque eu fiz cursos de CS. - Ярослав Рахматуллин
Para ser completamente pedante, você está comparando um verbo com um substantivo. Eu acho que "tally" e "count" realmente são sinônimos, e ambos podem ser usados ​​como verbo ou substantivo. - Brian
@Brian Uma observação justa e minha intenção é ilustrar (de uma maneira pedante) que a confusão se origina de uma má interpretação dos termos. Não há realmente uma diferença entre "o primeiro elemento" e "o elemento na posição 0". Ambos são um elemento. o primeiro, não "zeroth". Não existe tal coisa como contando a partir de zero. Enumeração começa em 1 por definição, enquanto endereçamento pode ser a-> 1, b-> 2. c-> 3 ou 0-> 1, 1-> 2, 2-> 3. O exemplo mais comum de "contar do zero" pode ser encontrado em livros de matemática do ensino médio na forma de {x₀, x₁, x₂} - mas o índice é um índice. - Ярослав Рахматуллин
É só que os designers realmente andaram um pouco antes de se decidirem pelo esquema atual. O que parece "óbvio" agora não era. E provavelmente um esquema um pouco diferente poderia ter sido escolhido e agora pareceria mais "óbvio" do que o que temos. - Daniel R Hicks


Eu acho que isso foi coberto antes por "Prof. Dr. Edsger W. Dijkstra"- Burroughs Investigador em uma carta datada de 11 de agosto de 1982: c.f. EWD831

Intitulado: Por que a numeração deve começar em zero. "Existem razões para preferir uma convenção à outra? Sim, existem ..." 

Note também que Dijkstra estava no ALGOL 68 equipe de design até 1968. Algol68 permite matrizes de 0, 1 ou qualquer número que o programador julgue apropriado para o algoritmo. c.f. ("A fabricação de Algol 68" relatos “Você pode definir matrizes triangulares?” alguém (Tony Hoare?) interrompeu. "Não apenas triangular, mas até mesmo elíptico", respondeu Aad, e mostrou como. ')

Especificamente, no Algol68, quando as matrizes (e matrizes) são fatiadas, elas obtêm um índice @ 1, portanto, há uma tendência para matrizes [1: ...]. Mas o "1st" limite inferior pode ser movido para iniciar no "0º" position especificando "@ 0", por ex. vector x [4: 99 @ 2], matriz y [4: 99 @ 1,4: 99 @ 0]. Da mesma forma, há um padrão / viés de a partir de 1 in fazer laços (a menos que "a partir de 0 "é explicitamente declarado), e de 1 para o inteiro caso Eu dentro ~, ~, ~ esac e $ c (~, ~, ~) $ escolha cláusulas

Parece que os comentários de Dijkstra sobre o Projeto de Relatório de março de 1968 (MR93 ) e suas insistências provocaram o que é discutivelmente um pré-usenet guerra de chamas: "há escritos que são adoráveis, embora não gramaticalmente, e há outros escritos que são extremamente gramaticais, mas são repugnantes. Isso é algo que não posso explicar a pessoas superficiais".  EWD230

O Algol 68 Final Report (FR) saiu em 20 de dezembro de 1968 quando foi ressentido na reunião de Munique e depois adotado pelo Grupo de Trabalho. Posteriormente, o relatório aprovado pela Assembléia Geral da UNESCO IFIP para publicação.

Por volta de 23 de dezembro (?) 1968 Dijkstra, Duncan, Garwick, Hoare, Randell, Seegmuller, Turski, Woodger e Garwick assinaram o AB31.1.1.1 "Minority Report", página 7 (Publicado em 1970).


12





A analogia da distância apresentada por outra pessoa se presta a uma ilustração muito prática:

"A que distância fica a sua casa do posto de gasolina mais próximo?"

"1 milha."

"Você mora no posto de gasolina?"

"Não, se eu morasse no posto de gasolina seria 0 milhas"

"Por que você está contando de zero em vez de um?"

Outro bom exemplo seria aniversários - não dizemos que alguém tem um ano de idade no dia em que nasceu, dizemos que é um ano depois.

Dizemos que anos bissextos ou eleições presidenciais nos EUA são a cada quatro anos, embora se você contar de um: 20002001, 2002, 2003, 2004 é cinco anos. (Incidentalmente, os romanos estragaram tudo por um tempo e passaram anos juntos demais)

Meu ponto é, nós "contamos" de zero o tempo todo no mundo real - "Quantas posições após [início da matriz] é o elemento que você quer" simplesmente é a pergunta que você está respondendo com uma contagem de zero em muitos programas de computador. Você não diria que o primeiro elemento é uma posição depois de o começo, você faria? isto é o começo.


10



Sua matemática sobre as eleições está perdida em um ano. Seu exemplo contém 2 anos de eleição dentro de um período de 5 anos; a ilustração correcta seria a passagem de 4 anos de uma eleição para a seguinte, ou seja, 2000 -> 2001 (1 ano), 2001 -> 2002, 2002 -> 2003, 2003 -> 2004. - Jimmy
@ Jimmy Essa foi minha ponto - se as pessoas "contavam de um" no sentido em que queriam computadores, contariam 2000 como um, em vez de zero. Isto é, incidentemente, como os antigos romanos realmente o fizeram (e de fato descreveriam um ciclo como "2000, 2004, 2008" como um ciclo de cinco anos). - Random832
Seu exemplo de aniversário não é universalmente verdadeiro. Por exemplo, na Coreia do Sul o primeiro ano de vida é contado como um em vez de zero. - BennyMcBenBen


Como já foi dito por outros computadores não contam a partir de zero.

Algumas linguagens indexam de 0. A indexação de 0 tem duas vantagens principais:

  1. Ele converte em assembly de maneira natural porque pode ser interpretado como um deslocamento de um ponteiro para a primeira posição.

  2. Você não fica estranho quando quer negativas. Quantos anos entre 1BC e 1AD? Nenhum. Porque, embora o BC seja efetivamente datas negativas, não há ano zero. Se tivesse havido 0AD, não haveria nenhum problema aqui. Você vê o mesmo problema em todo lugar na ciência, onde as pessoas têm ingenuamente definido o primeiro elemento em um conjunto como +1.


6



Sim, e toda a estupidez de esperar até 2001 pelo novo milênio. Isso confunde exatamente aquelas pessoas que também não "recebem" matrizes com base zero quando se interessam por programação. :) - Kaz
Além disso, se "1 milha" significa "aqui mesmo", então, como uma milha é 1760 pés, isso significa que "1760 pés" também significa "aqui mesmo", certo? Errado, "1 pé" significa aqui, opa! Nesta estupidez baseada, "aqui mesmo" é um pé, uma polegada, um centímetro, etc. - Kaz
@kaz onde pés => jardas. 1760 jardas em uma milha. - Brad


Contando naturalmente começa em zero

Aqui está o algoritmo para contar maçãs em uma cesta:

count := 0

for each apple in basket
   count := count + 1

Após a execução do acima, count detém o número de maçãs. Pode ser zero, porque as cestas podem estar vazias.

Se você não usa seu cartão de crédito durante um mês inteiro, recebe uma fatura de 1 dólar? Ou 1 centavo?

Quando você redefinir o medidor de viagem no odômetro do seu carro, ele vai para 0001 ou 0000?

Arrays podem fornecer várias visualizações dos mesmos dados

Considere uma matriz de estruturas de 32 bits d, cada um feito de palavras de 16 bits w. Cada palavra é composta de dois bytes de 8 bits b. Na indexação zero, a sobreposição parece muito conveniente:

d: |   0   |   1   |
w: | 0 | 1 | 2 | 3 |
b: |0|1|2|3|4|5|6|7|

O objeto de 32 bits d[1] como no endereço da palavra w[2] que é facilmente calculado multiplicando o índice por 2, que é a razão entre os tamanhos do objeto de 32 e 16 bits. Além disso, no endereçamento de byte, é b[4].

Isso funciona porque zero é zero, em cada unidade de medida: byte, word, double word e assim por diante.

Veja o diagrama acima: parece muito com uma régua, em que as conversões de unidade são intuitivas.

Com uma indexação baseada, ela quebra:

d: |   1   |   2   |
w: | 1 | 2 | 3 | 4 |
b: |1|2|3|4|5|6|7|8|

Agora não podemos simplesmente multiplicar o d indexar por 2 para obter o w índice, ou por 4 para obter o b índice. A conversão entre as unidades torna-se desajeitada. Por exemplo, para ir de d[2] para b[4], temos que calcular ((2 - 1) * 4) + 1 = 5.

Temos que subtrair esse viés traquina no d unidades, em seguida, fazer o dimensionamento no sistema de coordenadas baseado em zero natural e, em seguida, adicionar de volta o traquinas 1 em b unidades. Note que não é o mesmo 1! Subtraímos uma largura de palavra dupla, mas adicionamos uma largura de byte.

A conversão entre visões diferentes dos dados se torna algo como conversão Celsius-Fahrenheit.

Aqueles que dizem que os arrays baseados em um são fáceis de lidar no nível de implementação, porque há apenas uma simples subtração de 1 estão enganando a si mesmos e a você. Isto é verdade apenas se não fizermos cálculos de escalonamento entre diferentes tipos de dados. Esses cálculos ocorrem em qualquer programa que tenha uma visão flexível dos dados (por exemplo, um array multidimensional também acessado como unidimensional) ou que manipule o armazenamento: por exemplo, um alocador de memória, sistema de arquivos ou biblioteca de buffer de quadros de vídeo.

Minimizando Dígitos

Em qualquer base, se quisermos usar o menor número de dígitos para implementar um intervalo de valores que é uma potência da base, devemos começar do zero. Por exemplo, na base dez, três dígitos é o suficiente para nos dar mil valores distintos de 0 a 999. Se começarmos de 1, nós transbordamos apenas um valor, e precisamos de quatro dígitos.

Isso é importante em computadores, porque o número de dígitos em binário se traduz em linhas de endereço de hardware. Por exemplo, um chip ROM com 256 palavras pode ser endereçado de 0 a 255, o que requer 8 bits: 00000000 a 11111111. Se for endereçado de 1 a 256, então nove bits são necessários. Temos que adicionar mais um traço de endereço à placa de circuito ou ao circuito integrado. Então, o que possivelmente aconteceria na prática seria que 0 seria apenas chamado 1 no nível da API do software para acessar esse chip. Um pedido para a palavra 1 colocaria 00000000 no barramento de endereços de 8 bits. Ou então, uma solicitação para 1 se traduziria no endereço 00000001, como esperado, mas uma solicitação para 256 mapearia para o endereço não utilizado de 8 bits 00000000 em vez do endereço de 9 bits 100000000. Ambos esses kludges são realmente soluções em busca de um problemae são totalmente evitados consistentemente usando 0 a 255 no hardware, no software e em todas as interfaces de usuário e documentação.

Deslocamentos baseados em uma pessoa são fundamentalmente estúpidos

Considere a teoria da música ocidental, por exemplo. Nós temos escalas diatônicas com Sete nota, mas chamamos o espaço que eles cobrem oitava! A inversão de intervalos segue então a regra de nove: por exemplo, a inversão de um terço é um sexto (subtraia três de nove). Então, três números diferentes estão em jogo para algo tão simples: sete (notas em uma escala), oito (oitava) e nove (subtrair da para inverter).

Se sete notas fizessem uma septação ou heptave e intervalos fossem baseados em zero, então subtrairíamos de sete para inverter. Tudo baseado em sete.

Além disso, os intervalos podem ser facilmente empilhados. No sistema atual, se pularmos um quinto e depois um quarto novamente, e depois um terceiro, não podemos simplesmente adicioná-los. O intervalo resultante é dois a menos. Não é um twelvth, mas na verdade um décimo! Em cada estágio, temos que subtrair um. Subindo por um quinto e depois um quarto não é um nono, mas apenas uma oitava.

Em um sistema de música projetado de maneira simples, poderíamos adicionar intervalos para determinar os saltos resultantes. Uma sequência de notas que começa e termina na mesma nota teria então uma propriedade semelhante à lei de tensão em torno de um circuito: todos os intervalos somariam zero.

A teoria musical e a escrita estão bastante desatualizadas. A maior parte não mudou desde os dias em que a composição foi feita com canetas de pena à luz de uma vela.

Sistemas baseados em uma única pessoa confundem as mesmas pessoas que não conseguem lidar com matrizes baseadas em zero

Quando o ano de 2000 chegou, muitas pessoas ficaram confusas porque o novo milênio não começou. Aqueles que apontam que não começarão até 2001, eram vistos como cocô e dweebs. Afinal, você está em seus 20 anos quando faz 20 anos, certo? Não quando você faz 21 anos. Se você pensou que o milênio começou em 1º de janeiro de 2000, então você não tem o direito de reclamar de matrizes baseadas em zero em qualquer linguagem de programação. Eles trabalham exatamente como você gosta. (Mas, sim, os proponentes de deslocamentos e matrizes baseados em uma pessoa são dweebs e party-poopers. Séculos devem começar nos anos XX00 e milênios em X000 anos.)

Os calendários são burros, mas pelo menos a hora do dia é zero

Cada novo minuto no seu relógio começa com: 00 segundos. Cada nova hora começa com 00:00 minutos e segundos. E, pelo menos em um relógio de 24 horas, o dia chega quando a meia-noite bate e os incrementos de 11:59:59 para 00:00:00.

Assim, se você quiser calcular segundos da meia-noite por um tempo como 13:53:04, basta avaliar 13 * 3600 + 53 * 60 + 4. Não insípido 1 adições ou subtrações.

Fechando o discurso sobre o MIDI

Ok, o que há com músicos, mesmo supostamente técnicos?

MIDI! Ele usa a numeração baseada em zero para programas e canais na representação real das mensagens, mas a engrenagem exibe como 1 base! Por exemplo, os programas de 0 a 127 são chamados de 1 a 128 na maioria dos equipamentos, mas alguns chamam de 0 a 127 ou até mesmo dão ao usuário uma escolha.

Os programas 71 a 80 são considerados um "banco" de dez. Ele diz isso no meu pedal MIDI, por exemplo. Os footswitches são rotulados de 1 a 10 e, se eu estiver no sétimo banco, eles escolhem os programas 71 a 80. No entanto, alguns dispositivos ou software de computador exibem os números de programa de 1-128 como 0 a 127 ou até mesmo fornecem ao usuário escolha! O que é pior: sistemas baseados em um ou caos criados usando um e zero baseados ao mesmo tempo?

Os números dos canais MIDI são chamados de 1 a 16, mas são representados por 0 a 15 binários. Como se estivesse a despeito da apresentação baseada em um, alguns equipamentos usam um dispswitch para configurar um número de canal e, muitas vezes, esses switches usam apenas o código binário baseado em zero. Então, se você quiser o canal 3, você deve alterná-lo para 0010 (binário 2).


3





Se bem me lembro da minha aula de Conceitos de Linguagem de Programação ... idiomas sendo indexados em 0 e outros sendo 1-index tinham a ver com razões históricas. Algol-68, o pai das linguagens de programação, na verdade, era 1 indexado, assim como o Fortran e algumas outras linguagens "comerciais" como o COBOL. Em algumas dessas linguagens, no entanto, você poderia especificar explicitamente qual seria seu índice inicial. Há uma tabela interessante deste Aqui.

Basicamente de volta ao "Ye Olde Days"matemáticos, cientistas e outros" acadêmicos "geralmente usavam linguagens indexadas 0, enquanto usuários de linguagens como o COBOL não achavam útil começar a contar em 0, então nessas línguas fazia mais sentido começar em 1 (parecia menos confuso).

Agora, se a sua pergunta se refere a por que, até onde um computador (não é uma língua) naturalmente começa a contar a partir de zero ... bem, eu acho que é inerente ao binário: ex: 0000 = zero 0001 = um ... e assim por diante ...


1



Não tem nada a ver com representação binária. Os números binários e decimais começam a partir de 0 (como você mostra no seu exemplo). - Matteo
Bem, tem algo outro fazer com binário. Com quatro bits, 0000 a 1111, você pode endereçar um banco de memória de 16 palavras. Se você fizer isso baseado em um, então você precisa de cinco linhas de endereço para representar 0001 a 10000. Ou então você faz o que, por exemplo, MIDI faz com números de canal: 0000 é usado internamente, mas as interfaces de usuário mostram 1! Se o hardware fosse baseado em decimal, seria o mesmo problema, no entanto. Três dígitos fornecem mil endereços se você começar do zero, mas se começar de 1, precisará de quatro dígitos. - Kaz