~Python中的Binary Ones补充3

问题描述 投票:0回答:2

只是怀疑二元一体的补充是如何工作的。例如(在python中): -

a = 60 print(~a)

给出一个输出:- -61

60不是二元的补充: -

a = 0011 1100

~a = 1100 0011

它不应该是-60

我知道我错了,但为什么要转向-61

python-3.x bitwise-operators
2个回答
0
投票

~是一个按位求逆运算符和it acts exectly as defined

x的按位求逆定义为 - (x + 1)。

这就是整数的two's complement representation的按位反转如何工作。

这两个补充轮可以很好地形象化:

enter image description here

如您所见,1的按位反转为-2,2的按位反转为-3,...,60的按位反转为-61。


0
投票

你快到了。 1100 0011实际上是-61

这是负二进制转换为十进制的方式:

  1. 反转位
  2. 加1
  3. 转换为十进制
  4. 添加负号

所以:

1100 0011

0011 1100 <-- bits inverted

0011 1101 <-- one added

       61 <-- converted to decimal

      -61 <-- added negative sign

来自维基百科的Two's complement page

N位数的二进制补码被定义为相对于2 ^ N的补码。例如,对于三位数010,二进制补码为110,因为010 + 110 = 1000。

这里1100 0011的补充是0011 1101 cuz

    1100 0011
+   0011 1101
-------------
  1 0000 0000 
© www.soinside.com 2019 - 2024. All rights reserved.