为什么~2等于-3?~操作符是如何工作的?
当前回答
我认为对于大多数人来说,困惑的部分来自于十进制数和有符号二进制数的区别,所以让我们先澄清一下:
对于人类十进制世界: 01表示1, -01表示-1, 对于计算机的二进制世界: 101是无符号的,表示5。 101的意思是(-4 + 1),如果是有符号的数字在x位置。 | x
所以2的翻转位= ~2 = ~(010)= 101 = -4 + 1 = -3 这种混淆是由于混淆了有符号的结果(101=-3)和没有符号的结果(101=5)
其他回答
~翻转值中的位。
为什么~2等于-3与数字的位表示方式有关。数字用二的补数表示。
2是二进制值
00000010
和~2翻转位,所以现在的值是:
11111101
它是-3的二进制表示。
位补操作符(~)是一个一元操作符。
它的工作原理如下
首先,它将给定的十进制数转换为相应的二进制数 价值。这是在2的情况下,它首先将2转换为0000 0010(到8位二进制数)。
然后它将数字中的所有1都转换为0,所有0都转换为1,然后数字将变成11111101。
这是-3的2的补表示。
为了找到无符号的值使用补,即。要简单地将1111 1101转换为十进制(=4294967293),只需在打印时使用%u。
我认为对于大多数人来说,困惑的部分来自于十进制数和有符号二进制数的区别,所以让我们先澄清一下:
对于人类十进制世界: 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位机器上。
基本上,动作是一种补充,而不是否定。
这里x= ~x产生的结果总是-(x+1)。
X = ~2
- (2 + 1)
-3