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

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

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

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

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

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

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

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

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

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

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

Редактировать:

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

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

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

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

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

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

Давайте будем гением компьютера.