为什么~2等于-3?~操作符是如何工作的?


当前回答

基本上,动作是一种补充,而不是否定。

这里x= ~x产生的结果总是-(x+1)。

X = ~2

- (2 + 1)

-3

其他回答

~翻转值中的位。

为什么~2等于-3与数字的位表示方式有关。数字用二的补数表示。

2是二进制值

00000010

和~2翻转位,所以现在的值是:

11111101

它是-3的二进制表示。

位操作符是一个一元操作符,根据我的经验和知识,它的工作原理是符号和幅度方法。

例如~2的结果是-3。

这是因为逐位操作符将首先以符号和幅度表示数字,即0000 0010(8位操作符),其中MSB是符号位。

然后取2的负数,也就是-2。

-2用符号和幅度表示为1000 0010(8位运算符)。

之后,它将1添加到LSB(1000 0010 + 1),得到1000 0011。

也就是-3。

正如其他人所提到的~只是翻转位(将1变为0,将0变为1),由于使用了2的补码,您就得到了您所看到的结果。

需要补充的一点是为什么使用2的补数,这是为了对负数的运算和对正数的运算是一样的。把-3看成是要加3才能得到0的数字,你会看到这个数字是1101,记住二进制加法就像小学(十进制)加法,只是你得到2时进1,而不是10。

 1101 +
 0011 // 3
    =
10000
    =
 0000 // lose carry bit because integers have a constant number of bits.

因此1101是-3,翻转位就得到0010,也就是2。

这个操作是补语,不是否定语。

考虑~0 = -1,然后从这里开始。

否定的算法是,“补,加”。

你知道吗?还有一种“一的补”,它的逆数是对称的,它有一个0和一个-0。


位补操作符(~)是一个一元操作符。

它的工作原理如下

首先,它将给定的十进制数转换为相应的二进制数 价值。这是在2的情况下,它首先将2转换为0000 0010(到8位二进制数)。

然后它将数字中的所有1都转换为0,所有0都转换为1,然后数字将变成11111101。

这是-3的2的补表示。

为了找到无符号的值使用补,即。要简单地将1111 1101转换为十进制(=4294967293),只需在打印时使用%u。