3

~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;
}
4

2 に答える 2

15

これには多くの問題があります。

  1. unsigned int をビットネゲートしてから、signed int として出力しています (%d符号付き整数用です)。結果をunsigned intとして出力すると、気付くでしょう...

  2. 32 ビットintマシンでは、10(10 進数) は1010(2 進数) ではなく000000000000000000000000000001010.

  3. 最後に、すべてを符号付き整数に変換し、2 の補数表記について学び、負の数がコンピューターにどのように格納されているかを調べます。

于 2013-09-15T22:31:05.940 に答える
7

最上位ビット (符号付き変数の符号ビット) を含むすべてのビットを反転していることを忘れないでください。変数を符号なしとして定義しても、バイナリ表現は変更されず、プログラムでの使用方法のみが変更されます。

したがって、数値を符号付き ( %d) として出力すると、-11 が得られます。

 10 = 0x0000000A (10)
~10 = 0xFFFFFFF5 (-11 signed / 4294967285 unsigned)

署名なしで印刷するには:

printf("bitwise %u\n ",b); 
于 2013-09-15T22:31:35.163 に答える