Чому комп'ютери підраховують від нуля?
Підрахунок від нуля є дуже поширеною практикою на багатьох комп'ютерних мовах, але чому? Прочитайте, як ми досліджуємо це явище, і чому вона настільки поширена.
Сьогоднішня сесія запитань та відповідей приходить до нас люб'язно SuperUser - підрозділ Stack Exchange, групування веб-сайтів із запитаннями та відповідями на рівні спільноти..
Питання
Читач SuperUser DragonLord цікавиться, чому більшість операційних систем і мов програмування нараховуються з нуля. Він пише:
Комп'ютери традиційно підраховують числові значення, починаючи з нуля. Наприклад, масиви мов програмування на основі С починаються з нульового індексу.
Які історичні підстави існують для цього, і які практичні переваги враховуючи від нуля, мають понад відлік від одного?
Навіщо насправді? Як і поширена практика, безумовно, існують практичні причини її реалізації.
Відповідь
Співробітник SuperUser Matteo пропонує наступну інформацію:
Підрахунок масивів від 0 спрощує обчислення адреси пам'яті кожного елемента.
Якщо масив зберігається в заданій позиції в пам'яті (він називається адресою), позицію кожного елемента можна обчислити як
елемент (n) = адреса + n * розмір_елемента
Якщо ви вважаєте перший елемент першим, обчислення стає
елемент (n) = адреса + (n-1) * size_of_the_element
Не велика різниця, але вона додає непотрібні віднімання для кожного доступу.
Редагувати, щоб додати:
- Використання індексу масиву як зміщення не є вимогою, а просто звичкою. Зміщення першого елемента може бути приховано системою і прийнято до уваги при виділенні і посилання на елемент.
- Dijkstra опублікував статтю «Чому нумерація повинна починатися з нуля» (pdf), де він пояснює, чому починаючи з 0 - кращий вибір. Початок з нуля дозволяє краще представити діапазони.
Якщо ви хочете глибше заглибитися у відповідь, папір Дейкстри є інформативним читанням.
Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.