Нумерация в нулевом месяце

Некоторые популярные языки программирования используют месячную нумерацию, которая отключена на 1 - JavaScript приходит на ум, как и Java, и если память служит, C является другой. У меня есть несколько вопросов:

  • Если вы проигнорируете нумерацию месяца, используемую мирянами, то почему бы не ради последовательности не игнорировать нумерацию дня, используемую мирянами, и число дней в каждом месяце, начиная с 0?
  • Почему это так часто?
  • Чья идея была в первую очередь?

Ответ 1

Использование нуля для начала подсчета - фактически трюк оптимизации от программистов Ассамблеи. Вместо того, чтобы присваивать 1 регистру count, они XOR'или регистр с самим собой, что было немного быстрее в цикле CPU. Это означало, что подсчет начнется с 0 и всегда будет соответствовать длине элементов, исключая последний.

Кроме того, использование нуля также популярно с помощью арифметики указателей, в которой вы бы использовали один базовый указатель, указывающий на некоторую выделенную память, плюс второй указатель, который был бы смещен от этого базового указателя. Здесь, используя нулевое значение, очень важно указать смещение на базу блока памяти. (Общая логика массива имеет тенденцию быть базовым адресом плюс размер записи смещения x.)

И номера месяца на основе нуля? Часто многие среды программирования вычисляют данные за несколько дней с тех пор, как некоторые данные по умолчанию. 31 декабря 1899 года - популярная дата, хотя в качестве базовой даты было много других дат. Все остальные даты смещены от этой базы и будут храниться только как один номер. Фракции будут использоваться для указания часов, минут и секунд, где 0,25 будет 24/4 = 6 часов. Таким образом, чтобы преобразовать дату в настоящую дату, вся окружающая среда должна преобразовать это число в настоящую дату.

Однако комбинация массивов с нулевым основанием и значений месяца, основанных на 1, действительно создает проблему. Чтобы получить название месяца месяца 9, вам нужно будет получить элемент 8 из массива месяца. Некоторые разработчики были бы счастливы с уменьшением номера месяца, прежде чем получить его имя. Другие предпочли изменить месяц на что-то ноль-основанное, потому что люди просто хотят знать имя, а не число. Это личное мнение.

Ответ 2

Это то, что есть, и огромный вес программного обеспечения, построенного для этого предположения, означает, что он будет на некоторое время.

Мое мнение таково, что это была вина C, и все те другие языки, принадлежащие Джони, только что соответствовали ему.

Вы получаете некоторые забавные ситуации от людей, которые не знают лучше. Одним из немногих ошибок, которые нашла наша команда в 2000 году, был веб-сайт с гордостью объявляя, что год был 19100 года, просто потому, что они префикс struct tm год буквальным "19".

Ответ 3

Да, у римлян тоже были проблемы с нолем.

Это просто [неинтуитивное] следствие математики (являющееся сильным компонентом программирования, особенно раннего программирования), определяющим нуль как первый (проблематичный термин тот), реальный, положительное * натуральное число, а так как массив индексируется с вещественными натуральными числами, "первый" элемент находится в индексе 0.

Месяцы на самом деле называются значениями в массиве, где дни и годы являются пронумерованными значениями - возможно, было бы более полезно думать о днях/годах как о массивах, которые выглядят как { "1", "2", "3",...}.

Относительно того, почему это так часто (кроме математически правильного), хорошо, что все языки, которые вы указали, сходят с общего происхождения для одной вещи...

Edit:

Посмотрев дальше, эта ссылка wikipedia содержит несколько полезных и интересных причин для нулевой индексации (которая напрямую не говорит о том, почему месяцы индексируются с нулевой отметкой, но я думаю, что это уже охвачено), и эта ссылка fooobar.com/info/13364/... ответила на вопрос раньше.

Похоже, что преобладающим мнением является либо "историческая авария", либо "потому что месяцы не являются числами, поэтому их нельзя сравнивать с день/год хранения" в зависимости от того, кого вы спросите.

* Извините, извините, физика!= математика возвращается, чтобы укусить меня там. Теперь, чтобы гладить мои руки.