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

~1 and ~0 giving strange results in python 3

&、|、^、~都是python中的位运算符。 &、^ 和 |对我来说都很好 - 当我取 1|0 时,我得到 1。但是 ~ 给我奇怪的结果。 ~1 给我 -2,~0 给我 -1。这是因为我使用的是整数还是什么?我是 运行 python 3.

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

那是因为 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')

第二个示例同样适用。

来自here

~x

Returns the complement of x - the number you get by switching each 1 for a 0 and each 0 for a 1. This is the same as -x - 1.

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

-1 - 1 确实等于 -2

-0 - 1 确实等于 -1