2010-12-07 3 views
3

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

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

Я думаю, что вы знали ответ – 2010-12-07 13:59:33

+1

Пытались ли вы сами? Обычно это лучший способ узнать. Спросить * почему * это другое дело. – 2010-12-07 14:04:02

+0

благодарит Коди, мне просто нужен «быстрый ответ». Спасибо за все отклики. – Lucas 2010-12-07 14:15:35

ответ

6

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

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

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

int x = 08; //error 

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

0

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

0

28.

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

Итак, 27 + 1 = 28

0

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

  • 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