Преброяването от нула е много често срещана практика на много компютърни езици, но защо? Прочетете, докато разглеждаме явлението и защо е толкова широко разпространено.
Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Reader на SuperUser DragonLord е любопитен защо повечето операционни системи и езици за програмиране се броят от нула. Той пише:
Компютрите традиционно съпоставят числови стойности, започващи от нула. Например, масивите в езиците за програмиране, базирани на С, започват от нула.
Какви исторически причини съществуват за това и какви практически предимства се броят от нула, за да се преброи от един?
Защо наистина? Както е широко разпространена практика, със сигурност има практически причини за нейното прилагане.
Сътрудникът на SuperUser Matteo предлага следните данни:
Изброяването на маси от 0 опростява изчисляването на адреса на паметта на всеки елемент.
Ако масив се съхранява на определена позиция в паметта (нарича се адрес), позицията на всеки елемент може да бъде изчислена като
елемент (n) = адрес + n * размер_от елемента
Ако считате първия елемент за първия, изчислението става
елемент (n) = адрес + (n-1) * размер_от елемента
Не е огромна разлика, но добавя ненужно изваждане за всеки достъп.
Редактиран за добавяне:
- Използването на индекса на масива като офсетов не е изискване, а просто навик. Офсетът на първия елемент може да бъде скрит от системата и да бъде взет предвид при разпределянето и посочването на елемент.
- Dijkstra публикува хартия "Защо номерирането трябва да започне от нула" (pdf), където той обяснява защо започване с 0 е по-добър избор. Започването от нула позволява по-добро представяне на диапазоните.
Ако искате да се вгледате по-дълбоко в отговора, хартията Dijkstra е информативно.
Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.