按位NOT运算符的说明

Max*_*xpm 19 bitwise-operators

为什么按位NOT运算符(~在大多数语言中)转换如下所示的值:

-2 -> 1
-1 -> 0
0 -> -1
1 -> -2

不应该-2转换为2,1转换为-1等?

Phr*_*ogz 26

在许多语言中看到负整数表示的两个补码.如您所见,-2表示为1111110; 如果你反转你得到的所有这些位0000001,即值为1.

  • 它是 -1 .... ~(0000) = 1111 .... 通过反二进制补码将 1111 转换为十进制:1111 - 1 = 1110 -> 0001 = 1 -> -1。最终按位非对数字执行的数学函数是`~x = (-1 * (x+1))` (2认同)

Ebo*_*ike 12

如果你用二进制看它会很有帮助.

首先,如您所知,负数表示为(最高可能的无符号数加1减去值).因此,16位整数中的-1(无符号值最高为65535)将为65536-1 = 65535,即十六进制为0xffff,或者1111 1111 1111 1111为二进制.

所以:

1为二进制= 0000 0000 0000 0001

不会导致所有位1111 1111 1111 1110.以十进制表示的是65534.而65536减去65535是1,所以这是-1.