Днешната сесия за въпроси и отговори ни идва с любезното съдействие на SuperUser - подразделение на Stack Exchange - обединяване на уеб сайтове с въпроси и отговори.
Въпроса
Reader на SuperUser DragonLord е любопитен защо повечето операционни системи и езици за програмиране се броят от нула. Той пише:
Computers traditionally tally numerical values starting from zero. For example, arrays in C-based programming languages start from index zero.
What historical reasons exist for this, and what practical advantages does counting from zero have over counting from one?
Защо наистина? Както е широко разпространена практика, със сигурност има практически причини за нейното прилагане.
Отговорът
Сътрудникът на SuperUser Matteo предлага следните данни:
Counting arrays from 0 simplifies the computation of the memory address of each element.
If an array is stored at a given position in memory (it’s called the address) the position of each element can be computed as
element(n) = address + n * size_of_the_element
Ако считате първия елемент за първия, изчислението става
element(n) = address + (n-1) * size_of_the_element
Не е огромна разлика, но добавя ненужно изваждане за всеки достъп.
Редактиран за добавяне:
- Използването на индекса на масива като офсетов не е изискване, а просто навик. Офсетът на първия елемент може да бъде скрит от системата и да бъде взет предвид при разпределянето и посочването на елемент.
- Dijkstra публикува хартия "Защо номерирането трябва да започне от нула" (pdf), където той обяснява защо започване с 0 е по-добър избор. Започването от нула позволява по-добро представяне на диапазоните.
Ако искате да се вгледате по-дълбоко в отговора, хартията Dijkstra е информативно.
Имате ли нещо, което да добавите към обяснението? Звучи в коментарите. Искате ли да прочетете повече отговори от други потребители на Stack Exchange? Вижте цялата тема на дискусията тук.