Найти в Дзене
IT

Почему в программирование числа начинается с нуля?

Говорить о каком-либо числе без его адреса нет смысла. Число 5, которое хранится по адресу 100, это совсем не то число 5, которое хранится по адресу 200. Это два разных числа, подразумевающие разное. Допустим, я сохранил количество книг (5) по адресу 100. Но также мне нужно сохранить количество карандашей (20). Хорошо, я запишу число 20 в адрес 101. Теперь, когда мне нужно узнать, сколько у меня есть книг, я буду читать число из адреса 100, а если понадобятся карандаши, то из адреса 101. Если я что-то перепутаю и прочитаю число не из того адреса, то получу неверный результат. Компьютеру ведь всё равно, для него это просто числа. И книги, и карандаши, и соответствие им адресов существуют только в моих понятиях. К счастью, адресам можно давать вполне нормальные имена, то есть мы можем написать что-то вроде: книги = 5 И это будет значить: по адресу "книги" сохранить число 5. Но к этому мы вернемся, когда перейдем к языкам программирования. Главное, что как адрес ни назови, это имя будет с

Говорить о каком-либо числе без его адреса нет смысла. Число 5, которое хранится по адресу 100, это совсем не то число 5, которое хранится по адресу 200. Это два разных числа, подразумевающие разное.

Допустим, я сохранил количество книг (5) по адресу 100. Но также мне нужно сохранить количество карандашей (20). Хорошо, я запишу число 20 в адрес 101.

Теперь, когда мне нужно узнать, сколько у меня есть книг, я буду читать число из адреса 100, а если понадобятся карандаши, то из адреса 101. Если я что-то перепутаю и прочитаю число не из того адреса, то получу неверный результат. Компьютеру ведь всё равно, для него это просто числа. И книги, и карандаши, и соответствие им адресов существуют только в моих понятиях.

К счастью, адресам можно давать вполне нормальные имена, то есть мы можем написать что-то вроде:

книги = 5

И это будет значить: по адресу "книги" сохранить число 5.

Но к этому мы вернемся, когда перейдем к языкам программирования. Главное, что как адрес ни назови, это имя будет существовать только для нас, а в памяти компьютера он всё равно будет иметь какой-то номер.

И первым номером всегда будет 0. Это кажется нелогичным. Мы всё привыкли считать с единицы. Мы говорим "первый", а не "нулевой". Если спортсмен прибежал первым, это же значит, что перед ним никого не было? Или был кто-то нулевой? Значит, первый прибежал не первым, а вторым? Всё становится запутанным.

-2

Но объясняется это элементарно. Нет никаких нулевых по счету элементов. Это неправильное выражение. Первый элемент – всегда первый, и всегда №1, а не №0.

Но его адрес равен нулю. Правильно будет сказать так: это первый элемент с адресом 0.

Адреса – это на самом деле расстояния от начала памяти. На каком расстоянии от начала памяти находится первый элемент? На нулевом. Поэтому у него адрес 0. На каком расстоянии от начала находится второй элемент? На расстоянии 1. Поэтому у него адрес 1. И так далее. Посмотрите на линейку, и увидите, что она тоже начинается с 0.

Адреса отмеряются так же, как расстояние отмеряется линейкой.
Адреса отмеряются так же, как расстояние отмеряется линейкой.

Когда почтальон доставляет письмо, инструкция для него выглядит так: "найди дом с номером 10". Когда компьютер ищет данные в памяти, инструкция для него выглядит так: "отсчитай 10 элементов от начала памяти". Если нужен самый первый элемент, то получится "отсчитай 0 элементов от начала памяти". Выходит, что без нуля здесь никак не обойтись.

Выражение адресов через расстояния очень удобно для многих программных операций!