Что печатает следующий фрагмент кода (на С)? - PullRequest
3 голосов
/ 07 декабря 2010

Что печатает следующий фрагмент кода (в C)?

int a = 033;
printf("%d", a + 1);

Ответы [ 4 ]

6 голосов
/ 07 декабря 2010

033 является восьмеричным целочисленным литералом , и его значение равно 8*3+3 = 27.Ваш код печатает 28.

Целочисленный литерал, который начинается с 0, является восьмеричным.Если он начинается в 0x, то он шестнадцатеричный.

Кстати, для примера

int x = 08; //error

- ошибка времени компиляции, поскольку 8 не является восьмеричной цифрой.

0 голосов
/ 07 декабря 2010

вот подсказка:

  • 3-значное число с нулем в начале является восьмеричным.
  • 2-значное значение с "0x" в начале является шестнадцатеричным.

Попробуйте посмотреть в этом примере:

 #include<stdio.h>
 main()
 {
 int a = 033;
 printf("\nin decimal: %d", a+1);
 printf("\nin hex: %x", a+1);
 printf("\nin octal: %o", a+1);
 }

это приводит к:

in decimal: 28
in hex: 1c
in octal: 34
0 голосов
/ 07 декабря 2010

28

033 является восьмеричным числом в C, потому что оно имеет начальный «0», и это означает, что его значение равно 27 в десятичном виде.

Итак, 27 + 1 = 28

0 голосов
/ 07 декабря 2010

Я бы рискнул сделать дикое предположение и сказал бы 28:)

...