2

が出力されることを期待して次のコードを書きました211が、コンパイルして実行すると、 が表示されます137

誰かが何が起こっているのか説明してもらえますか? ありがとう。

‎#include <stdio.h>

int main()
{
    int binary1,binary2;

    binary1 = 0100;
    binary2 = 0111;

    printf("%d\n", binary1 + binary2);

    return 0:
}
4

5 に答える 5

9

これらは 2 進数ではなく、8 進数(基数 8) です。

binary1 = 0100; // = 64
binary2 = 0111; // = 64 + 8 + 1 = 73

printf("%d \n", binary1 + binary2); // = 64 + 73 = 137
于 2012-07-15T19:17:39.153 に答える
6

%d数値を 10 進数で出力するためです。8 進数を出力したい場合は、 を使用する必要があり%o、これは211を出力します。

  • %d: 10 進数 => 137
  • %o: 8 進数 => 211

printf()数値を 8 進数で定義したことを知りません。

于 2012-07-15T19:23:10.453 に答える
3

0100 と 0111 の先行ゼロは、数値が 8 進数として解釈されることを意味します。8 進数の 100 は 10 進数の 64 であり、8 進数の 111 は 10 進数の 73 です。

于 2012-07-15T19:19:05.747 に答える
1

どちらの数値も 8 進数で、基数 8 で加算します。

于 2012-07-15T19:18:02.377 に答える
1

C では、'0' で始まる数値リテラルは 8 進数 (基数 8) です。それが結果137を表示している理由です

8 進数の 0100 は 10 進数の 64 に相当し、0111 は 73 に相当します。

so 64+73 = 137
于 2012-07-15T19:25:28.690 に答える