和标题差不多。我想了解如何使用:
(2 ** 32 - 1)
和 ^
(XOR) 将所有 0 翻转为 1,将所有 1 翻转为 0
示例中使用 python,(^) 是 XOR 运算符
print(00000000000000000000000000000001 ^ (2 ** 32 - 1))
输出:
11111111111111111111111111111110
谢谢
您没有具体指定它,但对于这个答案,我假设
**
是“幂”运算符,^
是异或运算符。
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。
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
。