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