Начална » как да » Защо компютрите се броят от нула?

    Защо компютрите се броят от нула?


    Преброяването от нула е много обичайна практика на много компютърни езици, но защо? Прочетете, докато изследваме явлението и защо е толкова широко разпространено.

    Днешната сесия за въпроси и отговори идва при нас с любезното съдействие на SuperUser - подразделение на Stack Exchange, групирано от общността уеб сайтове за въпроси и отговори.

    Въпроса

    SuperUser четец DragonLord е любопитен защо повечето операционни системи и програмни езици се броят от нула. Той пише:

    Компютри, традиционно съвпадащи с цифрови стойности, започващи от нула. Например, масиви в C-базирани езици за програмиране започват от индекс нула.

    Какви исторически причини съществуват за това и какви са практическите предимства, ако се брои от нула, то това е преброяване от един?

    Защо наистина? Колкото и широко разпространена е практиката, със сигурност съществуват практически причини за нейното прилагане.

    Отговорът

    Сътрудникът на SuperUser Matteo предлага следните прозрения:

    Броенето на масиви от 0 опростява изчисляването на адреса на паметта на всеки елемент.

    Ако даден масив се съхранява в дадена позиция в паметта (нарича се адрес), позицията на всеки елемент може да се изчисли като

    елемент (n) = адрес + n * размер_елемент 

    Ако считате първия елемент за първия, изчислението става

    елемент (n) = адрес + (n-1) * размер_елемент 

    Не е огромна разлика, но добавя ненужно изваждане за всеки достъп.

    Редактирано, за да добавите:

    • Използването на индекса на масив като компенсиране не е изискване, а само навик. Отместването на първия елемент може да бъде скрито от системата и да бъде взето под внимание при разпределянето и реферирането на елемента.
    • Dijkstra публикува статия “Защо номерирането трябва да започне от нула” (pdf), където той обяснява защо започването с 0 е по-добър избор. Стартирането от нула позволява по-добро представяне на диапазоните.

    Ако търсите да се задълбаете по-задълбочено в отговора, хартията на Dijkstra е прочетена с информация.


    Имате ли какво да добавите към обяснението? Звукът е изключен в коментарите. Искате ли да прочетете повече отговори от други технологични потребители на Stack Exchange? Вижте пълната тема за дискусия тук.