为什么Python中的XOR与(2 ** 32 - 1)会翻转二进制数的所有位?

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

和标题差不多。我想了解如何使用:

(2 ** 32 - 1)
^
(XOR) 将所有 0 翻转为 1,将所有 1 翻转为 0

示例中使用 python,(^) 是 XOR 运算符

print(00000000000000000000000000000001 ^ (2 ** 32 - 1))

输出:

11111111111111111111111111111110

谢谢

python binary
2个回答
1
投票

您没有具体指定它,但对于这个答案,我假设

**
是“幂”运算符,
^
是异或运算符。

2 ** 32(2的32次方)是二进制的

100000000000000000000000000000000

减 1 则为

011111111111111111111111111111111

XOR 运算符将两个操作数中不相等的每一位设置为 1。

所有操作一起进行:

2**32 = 100000000000000000000000000000000
   -1 = 011111111111111111111111111111111
  
        011111111111111111111111111111111
  XOR   000000000000000000000000000000001
      = 011111111111111111111111111111110

您会发现,这并不取决于数字前有多少个

0
,因为 0 XOR 0 = 0。

对于所有不超过 32 位的数字,此 XOR 运算实际上是 NOT。


0
投票
2**32-1 = 11111111111111111111111111111111
1       = 00000000000000000000000000000001

由于您对两个元素进行异或,因此您正在比较存在位差异的位置。

0:1 = 1
1:0 = 1
0:0 = 0
1:1 = 0

由于

2**32-1
都是 1,因此只要第二个数字中有
1
,它就会在结果中表示为
0
。如果您的第二个数字中有
0
,它将在结果中表示为
1

© www.soinside.com 2019 - 2024. All rights reserved.