С помощью этого фрагмента кода:При отображении значения переменной «int a = 011» я получаю 9. Почему?
int a = 011;
printf("a = %d", a);
Почему это результат
а = 9
С помощью этого фрагмента кода:При отображении значения переменной «int a = 011» я получаю 9. Почему?
int a = 011;
printf("a = %d", a);
Почему это результат
а = 9
011
представляет собой восьмеричное значение и его десятичный эквивалент равен 9. Предшествующая целочисленный литерал с 0
обозначает восьмеричное значение.
Использовать спецификатор %o
в printf
для печати значения в восьмеричном.
Ведущий 0
, в качестве int
буквальном или int
постоянной, представляет значение octal. Он называется восьмеричной константой.
Связанные: C11
стандарт, глава 6.4.4.1, целочисленные константы, пункт 3,
Восьмеричная константа состоит из префикса
0
необязательно следует последовательность цифр0
только через7
.
С 0
в начале числового литерала вы указываете восьмеричную систему. И 11
в восьмеричной системе - 1*8 + 1 = 9
.
У меня получилось целочисленное переполнение, когда я хотел посчитать количество обманов для этого вопроса. Но на теге C почти нет пользователей, которым это нужно. (Это похоже на вчера: http://stackoverflow.com/a/19652607/3933332) – Rizier123
@ Rizier123; Я бы сказал, что я ленивый парень, да ленивый парень. – haccks