Kāpēc datori skaitās no nulles?
Skaitīšana no nulles ir ļoti izplatīta prakse daudzās datoru valodās, bet kāpēc? Lasiet, kad mēs izpētām šo parādību un kāpēc tā ir tik plaši izplatīta.
Šodienas jautājumu un atbilžu sesija mums dod pieklājību no SuperUser-Stack Exchange apakšnodaļas, kas ir kopienas orientēta Q & A tīmekļa vietņu grupa.
Jautājums
SuperUser lasītājs DragonLord ir ziņkārīgs par to, kāpēc vairums operētājsistēmu un programmēšanas valodu skaitās no nulles. Viņš raksta:
Datori tradicionāli sakrīt ar skaitliskajām vērtībām, sākot no nulles. Piemēram, C-programmēšanas valodu bloki sākas no nulles.
Kādi vēsturiski iemesli tam ir, un kādas praktiskas priekšrocības, skaitot no nulles, ir vairāk nekā no vienas?
Kāpēc tiešām? Tā kā prakse ir plaši izplatīta, tā īstenošanai noteikti ir praktiski iemesli.
Atbilde
SuperUser ieguldītājs Matteo piedāvā šādus ieskatus:
Skaitīšanas bloki no 0 vienkāršo katra elementa atmiņas adreses aprēķināšanu.
Ja masīvs tiek saglabāts noteiktā vietā atmiņā (to sauc par adresi), katra elementa atrašanās vietu var aprēķināt kā
elements (n) = adrese + n * izmērs_izdevums
Ja pirmo elementu uzskatāt par pirmo, aprēķins kļūst
elements (n) = adrese + (n-1) * izmērs_izdevums
Tas nav milzīga atšķirība, bet tas rada nevajadzīgu atņemšanu katrai piekļuvei.
Rediģēts, lai pievienotu:
- Masīva indeksa izmantošana kā kompensācija nav prasība, bet tikai ieradums. Pirmā elementa nobīde var būt slēpta sistēmā, un to var ņemt vērā, piešķirot un atsaucot elementu.
- Dijkstra publicēja rakstu „Kāpēc numerācija jāsāk ar nulli” (pdf), kur viņš paskaidro, kāpēc sākot ar 0 ir labāka izvēle. Sākot ar nulli, var labāk attēlot diapazonu.
Ja meklējat dziļāk atbildēt, Dijkstra papīrs ir informatīvs lasījums.
Vai kaut kas jāpievieno paskaidrojumam? Skaņas izslēgšana komentāros. Vai vēlaties lasīt vairāk atbildes no citiem tehnoloģiju gudriem Stack Exchange lietotājiem? Apskatiet pilnu diskusiju pavedienu šeit.