python3:~2 = -0b11?

时间:2016-03-29 06:23:05

标签: python python-3.x bit-manipulation bitwise-operators

在python3

中运行以下命令
>>> print(2, bin(2), ~2, bin(~2))
> 2 0b10 -3 -0b11

我认为~2应为0b010b101

为什么-0b11

2 个答案:

答案 0 :(得分:2)

 2  = 00000010
~2  = 11111101

两个补码中11111101的价值是多少?

要回答这个问题,请遵循以下简单算法:

  • 翻转所有位
  • 在结果中添加1
  • 根据MSB确定标志
11111101 > 00000010 > 00000011 
         ^          ^ 
       Flip       Add 1

请注意,最重要的位是“1”,因此符号为负。

答案 1 :(得分:1)

首先看~2:

 2 = 0b0000...10 (n leading 0s)
~2 = 0b1111...01 (n leading 1s)

然后分析-0b11

使用两个补码表示法的大多数计算机编号表示,其中:

A - B = A + ~B + 1

所以-0b11是真实的:

  - 0b11
= 0 - 0b11
= 0b0000...00 + 0b1111...00 + 1
= 0b1111...01