が出力されることを期待して次のコードを書きました211
が、コンパイルして実行すると、 が表示されます137
。
誰かが何が起こっているのか説明してもらえますか? ありがとう。
#include <stdio.h>
int main()
{
int binary1,binary2;
binary1 = 0100;
binary2 = 0111;
printf("%d\n", binary1 + binary2);
return 0:
}
これらは 2 進数ではなく、8 進数(基数 8) です。
binary1 = 0100; // = 64
binary2 = 0111; // = 64 + 8 + 1 = 73
printf("%d \n", binary1 + binary2); // = 64 + 73 = 137
%d
数値を 10 進数で出力するためです。8 進数を出力したい場合は、 を使用する必要があり%o
、これは211を出力します。
%d
: 10 進数 => 137%o
: 8 進数 => 211printf()
数値を 8 進数で定義したことを知りません。
0100 と 0111 の先行ゼロは、数値が 8 進数として解釈されることを意味します。8 進数の 100 は 10 進数の 64 であり、8 進数の 111 は 10 進数の 73 です。
どちらの数値も 8 進数で、基数 8 で加算します。
C では、'0' で始まる数値リテラルは 8 進数 (基数 8) です。それが結果137を表示している理由です
8 進数の 0100 は 10 進数の 64 に相当し、0111 は 73 に相当します。
so 64+73 = 137