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