Почему ведущие нули используются для представления восьмеричных чисел?

Я всегда задавался вопросом, почему ведущие нули (0) используются для представления восьмеричных чисел, а не, например, - 0o. Использование 0o было бы столь же полезно, но не вызывало бы столько проблем, сколько и ведущих 0 es (например, parseInt('08'); в JavaScript). Каковы причины этого выбора?

Ответ 1

Все современные языки импортируют это соглашение из C, который импортировал его из B, который импортировал его из BCPL.

За исключением BCPL, используется #1234 для восьмеричного и #x1234 для шестнадцатеричного. B отклонился от этого соглашения, потому что # был унарным оператором в B (целое число с преобразованием с плавающей запятой), поэтому # 1234 нельзя было использовать, а # в качестве базового индикатора было заменено на 0.

Дизайнеры B попытались сделать синтаксис очень компактным. Думаю, именно по этой причине они не использовали двухсимвольный префикс.

Ответ 2

"0b" часто используется для двоичных, а не для восьмеричных. Ведущий "0", я подозреваю, что " O -ctal".

Если вы знаете, что собираетесь анализировать восьмеричные, используйте parseInt('08', 10);, чтобы обработать номер в качестве базовой.