1

タイトルが間違っているかもしれませんが、どう説明したらいいのかわかりません。

int x=0x4a;
h=!(0x80000000000&(0x39+(~x+1)));

結果は h=0 です。問題は、x が 32 ビットで、0x80000000000 が 32 ビットを超えることです。変数 i を 0x80000000000 に設定して 16 進形式で出力すると、0 が表示されます。その場合、0x80000000000 が 0 になるため、h の結果が 1 にならないのはなぜですか?

私が使った言語はCです

4

1 に答える 1

1

0x8000000000 はlong long int定数です。したがって、C コンパイラは、算術式の型を、式内で発生する最高精度に昇格させます。

代わりにあなたが書いた場合:

  int x=0x4a;
  int h1=(0x80000000000&(0x39+(~x+1)));
  int h = !h1;

その後h、1 になります。また、精度が不足しているという警告が発行される可能性があります。

于 2012-06-02T13:18:38.603 に答える