Что особенного в числах, начинающихся с нуля?

Это своего рода глупый вопрос, но это интересно для меня)

Это то, что я получаю с визуальной студией 2013

int i = 07; // i == 7 int i = 16; // i == 16 int i = 00016; // i == 14, why? int i = 05016; // i == 2574, wow ) int i = 08; // compile error, compiler expects octal number... 

Если число начинается с нуля и содержит 8, это ошибка компиляции. Это нормально? И что именно делает компилятор с начальными нулями, если 00016 == 14?

Спасибо всем ))

Да, это ожидается.

[C++11: 2.14.2/1]: Целочисленный литерал представляет собой последовательность цифр, которая не имеет части периода или экспонента. Целочисленный литерал может иметь префикс, который указывает его базу и суффикс, который указывает его тип. Лексически первая цифра последовательности цифр является наиболее значимой. Дискретный целочисленный литерал (базовая десятка) начинается с цифры, отличной от 0, и состоит из последовательности десятичных цифр. Цифрный восьмеричный литерал (базовая восьмерка) начинается с цифры 0 и состоит из последовательности восьмеричных цифр. 22 Шестнадцатеричный целочисленный литерал (базовый шестнадцати) начинается с 0x или 0X и состоит из последовательности шестнадцатеричных цифр, которые include десятичные цифры и буквы a через f и от A до F с десятичными значениями от десяти до пятнадцати. [Пример: число двенадцать может быть записано 12, 014 или 0XC. -End пример]

22 Цифры 8 и 9 не являются восьмеричными цифрами.

Целочисленный литерал, начинающийся с 0 представляет собой восьмеричное число , очень похожее на число, начинающееся с 0x – это шестнадцатеричное число.

Восьмеричные числа могут содержать только цифры от 0 до 7 , и именно поэтому вы получаете ошибку компиляции.

Целочисленные литералы, начинающиеся с 0 являются восьмеричными литералами. Поэтому они должны содержать только цифры 0-7.

(Смешно, это включает в себя собственно литерал 0 ).

Запуск числа с 0 делает его восьмеричным, поэтому цифры 8 и 9 являются незаконными, а ваши другие примеры показывают преобразование в десятичное.

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