〜1和~0在python 3中给出了奇怪的结果

时间:2015-01-22 19:10:02

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

&,|,^和〜都是python中的按位运算符。 &,^和|对我来说都很好 - 当我拿1 | 0时,我得到1.但是〜给了我奇怪的结果。 ~1给我-2,而0给我-1。这是因为我使用整数还是其他东西?我正在运行python 3。

我希望从〜0得到1,从〜1得到0(整数)。这可能吗?

2 个答案:

答案 0 :(得分:5)

来自here

<强> ~x

  

返回x的补码 - 通过将每个1切换为0并将每个0切换为1得到的数字。这与-x - 1相同。

在该声明的最后部分之后:

-1 - 1确实等于-2

-0 - 1确实等于-1

答案 1 :(得分:3)

这是因为the two's complement实现了整数。

如果从0000 0000切换所有位(假设此处为8位整数,但对于较大的位仍然有效),则得到1111 1111。在二的补码解释中,那是-1,因为要表示-1,你取1,反转所有位并加一:

   0000 0001 (= 1)
-> 1111 1110 (inverted)
-> 1111 1111 (added one, now this is '-1')

第二个例子同样适用。