17Aug

Kodėl kompiuteriai skaičiuoja nuo nulio?


Numerių skaičiavimas yra labai įprasta praktika daugelyje kompiuterių kalbų, bet kodėl? Perskaitykite, kaip mes tiriame reiškinį ir kodėl jis taip plačiai paplitęs.

Šiandienos klausimas &Atsakymų sesija ateina pas mus iš "SuperUser" - "Stack Exchange", bendruomenės pagrįstos "Q & A" svetainių grupės pasidalijimo.

Klausimas

SuperUser skaitytuvas DragonLord yra įdomu, kodėl dauguma operacinių sistemų ir programavimo kalbų skaičiuoja nuo nulio. Jis rašo:

Kompiuteriai tradiciškai susilygina skaitines vertes nuo nulio. Pvz., Masyvai C programavimo kalbomis prasideda nuo indekso nulio.

Kokios istorinės priežastys egzistuoja ir kokie praktiniai pranašumai, skaičiuojant nuo nulio, skaičiuojami nuo vieno?

Kodėl iš tikrųjų?Kaip plačiai paplitusi praktika, be abejo, yra praktinių priežasčių ją įgyvendinti.

Atsakymas

SuperUser autorius Matteo siūlo šias įžvalgas:

skaičiavimo masyvai iš 0 supaprastina kiekvieno elemento atminties adreso skaičiavimą.

Jei masyvas saugomas tam tikroje atmintyje( vadinamas adresu), kiekvieno elemento poziciją galima apskaičiuoti kaip

elementą( n) = adresą + n * size_of_thement

Jei pirmąjį elementą laikote pirmuoju, skaičiavimastampa

elementu( n) = adresas +( n-1) * size_of_thement elementas

Nėra didžiulis skirtumas, bet kiekvienai prieigai ji papildomai nereikalinga atimti.

Redaguota pridėti:

  • Masyvo indekso naudojimas kaip kompensacija nėra reikalavimas, bet tik įprotis. Pirmojo elemento nuokrypis gali būti paslėptas sistemos ir į jį atsižvelgiama paskirstant elementą ir jo nuorodos.
  • Dijkstra paskelbė straipsnį "Kodėl numeravimas turėtų prasidėti nulyje"( pdf), kur jis paaiškina, kodėl pradedant nuo 0 yra geresnis pasirinkimas. Pradedant nuo nulio, galima geriau apibūdinti intervalus.

Jei norėtumėte gilinti į atsakymą, Dijkstra popierius yra informatyvus skaitymas.

Turite ką nors įtraukti prie paaiškinimo? Garsas išjungtas komentaruose. Norite skaityti daugiau atsakymų iš kitų "Tech-savvy Stack Exchange" vartotojų?Patikrinkite visą diskusijų temą čia.