~10 の結果が -11 になるのはなぜですか? ~ 操作はビットごとに反転するため、5 ではないはずです。
10 = 1010
~10= 0101 //10 進数で 5
#include<stdio.h>
int main()
{
unsigned int b =10;
b= ~b;
printf("bitwise %d\n ",b);
return 0;
}
~10 の結果が -11 になるのはなぜですか? ~ 操作はビットごとに反転するため、5 ではないはずです。
10 = 1010
~10= 0101 //10 進数で 5
#include<stdio.h>
int main()
{
unsigned int b =10;
b= ~b;
printf("bitwise %d\n ",b);
return 0;
}
これには多くの問題があります。
unsigned int をビットネゲートしてから、signed int として出力しています (%d
符号付き整数用です)。結果をunsigned intとして出力すると、気付くでしょう...
32 ビットint
マシンでは、10
(10 進数) は1010
(2 進数) ではなく000000000000000000000000000001010
.
最後に、すべてを符号付き整数に変換し、2 の補数表記について学び、負の数がコンピューターにどのように格納されているかを調べます。
最上位ビット (符号付き変数の符号ビット) を含むすべてのビットを反転していることを忘れないでください。変数を符号なしとして定義しても、バイナリ表現は変更されず、プログラムでの使用方法のみが変更されます。
したがって、数値を符号付き ( %d
) として出力すると、-11 が得られます。
10 = 0x0000000A (10)
~10 = 0xFFFFFFF5 (-11 signed / 4294967285 unsigned)
署名なしで印刷するには:
printf("bitwise %u\n ",b);