~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
&、|、^、~都是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