http://ksniko.livejournal.com/ ([identity profile] ksniko.livejournal.com) wrote in [community profile] useless_faq2013-06-27 07:54 pm

Нумерация

А вот почему нумерация домов на улице начинается с единицы, а нумерация памяти в компьютере – с нуля?
Это случайно или в этом есть некий сакральный смысл?
А можно ли наоборот?
Дома с нуля, память с единицы?
Если нельзя, то почему?

[identity profile] tornader.livejournal.com 2013-06-27 06:10 pm (UTC)(link)
просто ноль - это абстрактная категория.
а единица - объктивная.

[identity profile] b0gu3.livejournal.com 2013-06-27 06:15 pm (UTC)(link)
Дома с нуля? Да можно хоть в минус. Вопрос - зачем?

А в компьютерах нуль = пустая ячейка, естественное начало.

[identity profile] lenivaya.livejournal.com 2013-06-27 06:17 pm (UTC)(link)
возраст тоже с нуля считают

[identity profile] urem-temon.livejournal.com 2013-06-27 06:21 pm (UTC)(link)
счет с единицы - естественный. типа, вот три дома: первый, второй, третий. нумерацию домов придумали ну очень давно, когда все были малограмотные, и нумерация "нулевой, первый, второй" слишком абстрактная. видано ли дело - домов три, а третьего нету!

[identity profile] apashenko.livejournal.com 2013-06-27 06:23 pm (UTC)(link)
Дома, как и все реальные вещи, считают естественными натуральными числами, ряд которых начинается с единицы. Ноль в множество натуральных чисел не входит.
Память же в компьютере не нумеруется, а адресуется (http://ru.wikipedia.org/wiki/%D0%90%D0%B4%D1%80%D0%B5%D1%81%D0%B0%D1%86%D0%B8%D1%8F_%D0%BF%D0%B0%D0%BC%D1%8F%D1%82%D0%B8), причём множество возможных адресов совпадает со множеством возможных значений ячеек этой же памяти. Ноль в это множество входит.
С точки зрения естественной нумерации, ячейка с адресом 00000000 — первая, 00000001 — вторая, 00000010 — третья и т.д.

[identity profile] imihajlov.livejournal.com 2013-06-27 06:25 pm (UTC)(link)
Люди считают с единицы, поэтому дома с единицы идут. А компьютер считает с нуля, потому что так удобнее и симметричнее: чтобы перейти к самому первому адресу (который нулевой), нужно просто сбросить все разряды числа в 0.

[identity profile] dendrr.livejournal.com 2013-06-27 06:25 pm (UTC)(link)
Вот жил средневековый человек в самом начале улицы. Жил и не тужил. И нравилось ему принимать гостей. И он говорил всем: живу я на улице Могучих Сусликов, в доме с зелеными оконными рамами, приходите.
Но город рос-рос, дома становились более-менее похожими. И его потомки стали говорить проще - "мы живем в крайнем доме". А еще пару веков позже, когда кому-то пришла идея нумеровать дома, то потомки говорили "Мы живем в первом доме по улице Могучих Сусликов". Так и повелось. А слово "первый" обозначается на письме цифрой "1". Вот и весь сказ.

А вот другой человек собрал компьютер. Сначала было несколько просто ячеек памяти. Складывал там, вычитал, умножал... Компьютеры совершенствовались, и понадобилось уже составлять списки. А это уже много ячеек памяти. Ну, память-то расширили - проблема не очень большая.
А как бы извлечь нужное число, подумал человек? Ячейки-то тупо нумерованные, от такого-то номера до какого-то еще. Подряд.
И придумал! Ввел т.н. "индекс". И список обозначался как-то так: M,I. Здесь "M" - номер ячейки, где находится первый элемент списка, а "I" - индекс. То есть номер элемента в списке.
И придумал этот человек правило: если мы нашли (вычислили или ввели с перфокарты) элемент списка с номером "I", то записываем его в ячейку с номером M+I. Соответственно, первый элемент записан в M, и ему соответствует номер (индекс) I=0.
Вот она и нумерация с нуля. Собственно, чтобы не путаться, заодно и сами ячейки нумеровали с нуля.

[identity profile] beesay.livejournal.com 2013-06-27 06:30 pm (UTC)(link)
Лучше бы спросили, почему Дионисий Малый не придумал нулевой год, из-за чего люди до сих пор путаются

[identity profile] xen0n.livejournal.com 2013-06-27 06:40 pm (UTC)(link)
Можно - все условность.
Но некоторая сложность все таки была бы. Сейчас в компьютерах памяти как правило меньше максимума (например, стоит 2Gb хотя вся система может и 64Gb поддерживать), а раньше это ограничение было критичным, во время 286ых например. Оно имеет "физическую" природу - количество бит шины адреса. Ну и сейчас, наверное, кто-то мучается с тем что больше 64G не лезет.

Соответственно, и адресация должна имеет столько же бит, сколько шина адреса. Можно больше, но это нерациональный расход памяти.
Так вот, если переменная-указатель, содержит значение 0, то как называть, чему оно равно? единице, а 1 равно двойке? :-)
Поэтому для адресации памяти, как-то все таки проще с нуля начинать.

[identity profile] nutsey.livejournal.com 2013-06-27 06:49 pm (UTC)(link)
Всё дело в том, что если на пальцах показать ноль то можно и в ответ кулаком в лицо получить.

[identity profile] aeropax.livejournal.com 2013-06-27 07:48 pm (UTC)(link)
Нумерация домов на разных сторонах улицы начинается с разных чисел: 1 и 2.
А иногда и не начинается: где находится дом 1 на Пенсильвания-авеню?
Edited 2013-06-27 19:52 (UTC)

[identity profile] dropjoweapon.livejournal.com 2013-06-27 07:58 pm (UTC)(link)
вам в школе информатику не преподавали?

[identity profile] 7nu7murik8n.livejournal.com 2013-06-27 08:49 pm (UTC)(link)
>>Ну и как давно придумали нумерацию домов?

А ноль когда придумали?

[identity profile] thetvv.livejournal.com 2013-06-27 10:57 pm (UTC)(link)
Там, где нужен порядковый номер, счет идет с единицы, а там, где нужно смещение — с нуля.

Вот Вы выше написали, что Вы — программист. OK, тогда поясню на близком Вам примере. Допустим, Вы получили пакет из трех байт. Первый байт имеет смещение 0 (от начала пакета, то есть от этого же первого байта), второй байт — смещение 1, третий — смещение 2. Обратите внимание, тут мы считаем байты по порядку от единицы (первый, второй, etc.) если упоминаем порядковый номер в привычном нам натуральном счете, но если будем иметь в виду смещение каждого байта, тогда начнем их же перечислять с нуля.

Нумерация же домов обычно идет с единицы, так как так сложилось исторически. Преимущество такого подхода в том, что нет возможной путаницы при устном и письменном упоминании номеров домов, то есть первый дом, и дом N1 — это обычно один и тот же дом. То есть и в одном случае у нас единица («первый» == 1), и в другом (N1), это удобно. Впрочем, кое-где и с нуля улицы нумеруют. Подробности — в Википедии. (http://ru.wikipedia.org/wiki/%D0%9D%D1%83%D0%BC%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D1%8F_%D0%B4%D0%BE%D0%BC%D0%BE%D0%B2)
Edited 2013-06-27 23:11 (UTC)

[identity profile] ghan.livejournal.com 2013-06-28 12:28 am (UTC)(link)
Счет с нуля появился позже (что естественно, потому что и сам нуль как абстрактная категория, придуман позднее, для счета натуральных предметов он вроде и нужен, но не обязателен, достаточно сказать - "нету"). Удобен же он потому, что при счете с нуля разряд не переполняется при достижении им максимума, что позволяет иметь на один разряд меньше, а это существенная экономия.

[identity profile] vombatus123.livejournal.com 2013-06-28 01:57 am (UTC)(link)
Кроме десятеричной системы, в программировании используется шестнадцатеричная и двоичная. Любые 4 бита вы можете записать в шестнадцатеричной системе одним символом, от 0 до F, т.е. от 0 до 15, десятичное же 16 в шестнадцатеричной системе записывается уже двумя символами. Так же и байт в шестнадцатеричной системе записывается всего двумя символами, от нуля до FF. Взглянув на такое число, можно легко понять, что находится в каждом разряде байта, 0 или 1.

[identity profile] angerona.livejournal.com 2013-06-28 02:19 am (UTC)(link)
Такие забавные ответы. На самом деле все можно -- все абстракция. Собственно, пару недель назад как раз во время прогулки заметили и показали детям номер на церкви посреди города: номер там был нулевой. Вот такой адрес.
http://www.cccambridge.org/

(Посмотрите, там внизу написан их адрес).

[identity profile] rocketsan.livejournal.com 2013-06-28 06:10 am (UTC)(link)
Раньше была битва за каждый байт - памяти ведь много не бываает... Почему ноль простаивает? Решили и его в дело приплести.
Edited 2013-06-28 06:10 (UTC)

[identity profile] stairian.livejournal.com 2013-06-28 07:28 am (UTC)(link)
Вы просто смешиваете разные понятия.
ПЕРВЫЙ элемент массива - обозначается в компьютере индексом 0. И в этом нет противоречия.

[identity profile] isaak-bobroga.livejournal.com 2013-06-28 09:34 am (UTC)(link)
Нумерация, и вообще счет объектов с единицы - естественный в плане терминологии. Единица - нечто существующее. Если есть дом - то это "один дом", или "первый дом" или "дом 1". Выражение дом 0 означало бы несуществование дома. Теоретически, улица начинается с несуществующего дома 0. Согласно своей природе, он невидим.
Счет с 0 в массивах в СИ и ассемблере имеет техническую природу. Разумеется, первая ячейка памяти идет с офсетом 0, и механизм обращения к элементу массива тупо проще, если нумеровать с 0. Но в других местах это вылазит в осложнение. Если у нас есть N объектов, то для обращения к ним в массиве надо перечислять индексы с 0 до N-1. Лишний гемморой для программиста, а вызвано всего лишь желанием оптимизировать процессы и память на самом компьютере.

[identity profile] rain251.livejournal.com 2013-06-28 09:50 am (UTC)(link)
дома-то с единицы, а вот комната 00 во многих административных зданиях есть.

[identity profile] idemidov.livejournal.com 2013-06-28 11:55 am (UTC)(link)
Дома это физические объекты, нумерацию физических объектов логично вести с единицы.

[identity profile] to-se.livejournal.com 2013-06-28 12:20 pm (UTC)(link)
Начинают с нуля, просто дом номер ноль это отсутствующий дом.

Page 1 of 2