Все значения: сохранены с использованием двоичного представления (это верно для целых чисел, поплавков, символов и т. Д.). Значение 10
(десятичное) сохраняется как последовательность двоичных цифр 00000000000000000000000000001010
(при условии, что существует 32-разрядный тип int
).
В операторе присваивания, как
i = 012;
компилятор знает, как преобразовать строку восьмеричных цифр в буквальном 012
в двоичном представлении выше. Ведущий 0
сообщает компилятору, что это значение представлено в восьмеричном представлении, иначе оно попытается сохранить десятичное значение 12
(00000000000000000000000000001100
).
В printf
заявлении
printf("%d\n", i);
спецификатор преобразования %d
говорит printf
, чтобы отобразить значение, хранящееся в i
отформатированный в виде строки десятичных цифр (10
). Аналогично, спецификатор преобразования %x
отображает значение, отформатированное как строка шестнадцатеричных цифр (a
).
Вы устанавливаете 'i' в восьмеричный 012 и' printf() 'it в десятичной системе ('% d'), что равно 10. Что в этом запутано? – EOF
В коде отсутствует 'c'. –
@ KerrekSB-LOL, OP говорит о языке C. –