0
int samp=0;

for(i=0;i<=31;i++)
{
  samp=samp|1<<i;
}
printf("\ %d\n",samp);

出力:

-1

ループするi<=31(32 ビットすべてを 1 に設定する) と -1 になるのはなぜですか? ループi<31すると、2147483647 が表示されます。なぜですか?

4

3 に答える 3

5

これは、最初のビットが符号ビットであるためです。

符号ビットが の1場合、数値は負であり、11111111 11111111 11111111 11111111たまたま数値 の 32 ビット表現になります-1

Two's Complementをチェックしてみてください。

于 2013-07-19T23:26:49.527 に答える