Мне всегда было интересно, почему для представления восьмеричных чисел используются ведущие нули (0
), а не, например, 0o
. Использование 0o
было бы столь же полезным, но не вызвало бы столько проблем, как ведущие 0
es (например, parseInt('08');
в JavaScript). Каковы причины этого выбора дизайна?
Почему для представления восьмеричных чисел используются ведущие нули?
Ответы (3)
Все современные языки импортируют это соглашение из C, который импортировал его из B, который импортировал его из BCPL.
За исключением BCPL, используется #1234
для восьмеричного и #x1234
для шестнадцатеричного. B отошел от этого соглашения, потому что # был унарным оператором в B (преобразование целого числа в число с плавающей запятой), поэтому # 1234 нельзя было использовать, а # как базовый индикатор был заменен на 0.
Разработчики B постарались сделать синтаксис очень компактным. Я думаю, это причина того, что они не использовали двухсимвольный префикс.
«0b» часто используется для двоичного, а не для восьмеричного. Я подозреваю, что ведущий "0" означает "O -ctal".
Если вы знаете, что собираетесь разбирать восьмеричное число, используйте parseInt('08', 10);
, чтобы он трактовал число как основание десять.
0b
я сделал ошибку, исправил 0o
.
- person Hauleth; 14.07.2012
Стоит отметить, что в Python 3.0 они решили, что восьмеричные литералы должны иметь префикс '0o', а старый префикс '0' стал SyntaxError по точным причинам, которые вы указали в своем вопросе.
https://www.python.org/dev/peps/pep-3127/#removal-of-old-octal-syntax.