次のコードフラグメント(C)は何を出力しますか?
int a = 033;
printf("%d", a + 1);
033
は8進整数リテラルであり、その値は8*3+3 = 27
です。コードが出力され28
ます。
aで始まる整数リテラル0
は8進数です。0x
それが16進数で始まる場合。
ちなみに、例として
int x = 08; //error
8
は8進数ではないため、コンパイル時エラーです。
私は大げさな推測の危険を冒して言うでしょう28
:)
28。
033はCの8進数です。これは、先頭に「0」があり、その値が10進数で27であることを意味するためです。
したがって、27 + 1 = 28
ここに手がかりがあります:
この例を見てみてください:
#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