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


当前回答

这里,二进制(8位)中的2是00000010,它的1的补码是11111101, 1的补数减去1得到1111110 -1 = 11111100, 这里的符号是-作为第8个字符(从R到L)是1 求1的补,no。即00000011 = 3 符号是负的所以这里是-3。

其他回答

这里,二进制(8位)中的2是00000010,它的1的补码是11111101, 1的补数减去1得到1111110 -1 = 11111100, 这里的符号是-作为第8个字符(从R到L)是1 求1的补,no。即00000011 = 3 符号是负的所以这里是-3。

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

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

X = ~2

- (2 + 1)

-3

下面是一种解释:

让我们以~2 = -3为例(为了简单起见,使用8位系统进行解释)

1)我们有2——> 00000010

2)我们可以得到~2—> 11111101 #通过简单地交换位。

[但常见的错误是,有些人试图将~2的二进制值直接转换为十进制(以10为基数)数字,在这种情况下,它是253。这不是我们寻找互补的方式。

3)现在我们找到一个二进制数,将其与二进制值2~相加得到0(00000000)作为结果。 在这种情况下,它是00000011(即3),因为如果我们将00000011加到我们已有的11111101,我们得到100000000,但由于我们使用的是8位系统,1在第9位,它被完全忽略,所以我们最终得到00000000。

4)从点(3)我们可以说~2+3 = 0,因此我们可以说~2 = -3

注意:-3的值是简单的11111101,可以用同样的方式解释。

我认为对于大多数人来说,困惑的部分来自于十进制数和有符号二进制数的区别,所以让我们先澄清一下:

对于人类十进制世界: 01表示1, -01表示-1, 对于计算机的二进制世界: 101是无符号的,表示5。 101的意思是(-4 + 1),如果是有符号的数字在x位置。 | x

所以2的翻转位= ~2 = ~(010)= 101 = -4 + 1 = -3 这种混淆是由于混淆了有符号的结果(101=-3)和没有符号的结果(101=5)

简单的 ...........

作为任何数字的2的补,我们可以通过将所有1逆为0来计算,反之亦然,然后再加上1。

这里N= ~N产生的结果总是-(N+1)。因为系统以2的补码的形式存储数据,这意味着它像这样存储~N。

  ~N = -(~(~N)+1) =-(N+1). 

例如::

  N = 10  = 1010
  Than ~N  = 0101
  so ~(~N) = 1010
  so ~(~N) +1 = 1011 

点就是负的原点。我的观点是假设我们有32位寄存器,这意味着2^31 -1位涉及到操作,剩下的一位在早期计算(补码)中被存储为符号位,通常为1。结果是~10 = -11。

~(-11) =10;

如果printf("%d",~0);结果是-1;

但printf(“%u”,~0)比结果:4294967295在32位机器上。