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 が表示されます。なぜですか?
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 が表示されます。なぜですか?
これは、最初のビットが符号ビットであるためです。
符号ビットが の1
場合、数値は負であり、11111111 11111111 11111111 11111111
たまたま数値 の 32 ビット表現になります-1
。
Two's Complementをチェックしてみてください。