printf ステートメントで以下のコードを使用しました。
void main()
{
int n=0102;
printf("%d", n);
}
これは、答えとして 66 を出力します。また、変数 n の値を 012 に変更しました。答えは 10 です。この変換方法について教えてください。
これは、数値 (整数定数) の 1 桁目が(2 桁目がまたはであって0
はならない) の場合、コンパイラがそれを 8 進数として解釈するためです。で印刷すると、10進数の値が得られます。
8 進数値を出力するには、指定子 を使用する必要がありますx
X
%d
%o
printf("%o", n);
整数定数は数字で始まりますが、ピリオドまたは指数部はありません。ベースを指定するプレフィックスと、そのタイプを指定するサフィックスを持つ場合があります。
10 進定数はゼロ以外の数字で始まり、一連の 10 進数字で構成されます。8 進定数は、接頭辞 0 と、その後に続く 0 から 7 までの数字のシーケンスのみで構成されます。16 進数の定数は、接頭辞 0x または 0X とそれに続く一連の 10 進数と文字 a (または A) から f (または F) で構成され、それぞれ値は 10 から 15 です。
1. 10 進定数:で始まってはなりません0
。
12 125 3546
2. 8 進定数: で始まる必要があり0
ます。
012 0125 03546
3. 16 進定数0x
: 常にまたはで始まります0X
。
0xf 0xff 0X5fff
値を 10 進数 (%d) で出力するように printf に指示します。%o を使用して、8 進数で出力します。
で始まり、0
その後に数字のみが続く数値リテラルは、8 進数として扱われます。したがって
0102 = (1 * 8^2) + (0 * 8^1) + (2 * 8^0) = 64 + 0 + 2 = 66
012 = (1 * 8^1) + (2 * 8^0) = 8 + 2 = 10