XOR 到底是做什么的?
What exactly does XOR do?
在回顾我参加 Udemy 的 Python 数据结构和算法课程中的一个问题的解决方案时,我对 "XOR" 的概念感到困惑。
正如您在下面看到的,我们从 2 个列表开始 - arr1 和 arr2,然后解决方案基本上尝试找到 arr1 中不在 arr2 中的数字(在本例中为 5)。 "XOR" 出现在行 "result^=num" 中,我不知道 "result" 变量如何根据 "num" 的值变化。
arr1 = [1,2,3,4,5,6,7]
arr2 = [3,7,2,1,4,6]
result = 0
for num in arr1+arr2:
print('result is ' + str(result))
print('num is ' + str(num))
result^=num
print('result is ' + str(result))
print()
print()
print('final result is ' + str(result))
输出:
result is 0
num is 1
result is 1
result is 1
num is 2
result is 3
result is 3
num is 3
result is 0
result is 0
num is 4
result is 4
result is 4
num is 5
result is 1
result is 1
num is 6
result is 7
result is 7
num is 7
result is 0
result is 0
num is 3
result is 3
result is 3
num is 7
result is 4
result is 4
num is 2
result is 6
result is 6
num is 1
result is 7
result is 7
num is 4
result is 3
result is 3
num is 6
result is 5
final result is 5
我知道例如当输入 1 等于输入 2 时 XOR 将变为“0”。如果输入 1 为 0,输入 2 为 1,或者如果输入 1 为 1,输入 2 为 0,则 XOR 将为 return“1”。但我不明白如果输入 1 和输入 2 不相同并且它们不是 1 或 0 会怎样。假设输入 1 为 10 且输入 2 为 15 或者如果输入 1 为 15 且输入 2 为 10 那么XOR 将 return "5"。但是为什么在这种情况下 XOR 输出是“5”?
任何有助于我更好地理解输入与其 XOR 输出之间关系的想法都将不胜感激,希望是以一种不太技术性的方式!
XOR
是位运算。它将处理每一位。
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
例如 6 是 0b110
3 是 0b11
,所以 6 xor 3 是 0b101
即 5
XOR 适用于二进制。它只有 returns 1,如果一个数字在与另一个零相同的位中有一个 1。所以在这个例子中:
In [8]: bin(5)
Out[8]: '0b101'
In [9]: bin(6)
Out[9]: '0b110'
In [13]: 5^6
Out[13]: 3
In [10]: bin(3)
Out[10]: '0b11'
最左边的位是 1,所以它们清零。下一个值是 1 和 0,因此接下来的两位接收到 1,在 5^6 的情况下得到答案 3。
当对每一个排列的1和0进行异或运算时,你可以通过对每一位进行这样的运算来解出答案:
0^0 is 0
1^0 is 1
1^1 is 0
5 is 0b101
6 is 0b110
so for 5^6 = 3
the answer is
3 is 0b011
在回顾我参加 Udemy 的 Python 数据结构和算法课程中的一个问题的解决方案时,我对 "XOR" 的概念感到困惑。
正如您在下面看到的,我们从 2 个列表开始 - arr1 和 arr2,然后解决方案基本上尝试找到 arr1 中不在 arr2 中的数字(在本例中为 5)。 "XOR" 出现在行 "result^=num" 中,我不知道 "result" 变量如何根据 "num" 的值变化。
arr1 = [1,2,3,4,5,6,7]
arr2 = [3,7,2,1,4,6]
result = 0
for num in arr1+arr2:
print('result is ' + str(result))
print('num is ' + str(num))
result^=num
print('result is ' + str(result))
print()
print()
print('final result is ' + str(result))
输出:
result is 0
num is 1
result is 1
result is 1
num is 2
result is 3
result is 3
num is 3
result is 0
result is 0
num is 4
result is 4
result is 4
num is 5
result is 1
result is 1
num is 6
result is 7
result is 7
num is 7
result is 0
result is 0
num is 3
result is 3
result is 3
num is 7
result is 4
result is 4
num is 2
result is 6
result is 6
num is 1
result is 7
result is 7
num is 4
result is 3
result is 3
num is 6
result is 5
final result is 5
我知道例如当输入 1 等于输入 2 时 XOR 将变为“0”。如果输入 1 为 0,输入 2 为 1,或者如果输入 1 为 1,输入 2 为 0,则 XOR 将为 return“1”。但我不明白如果输入 1 和输入 2 不相同并且它们不是 1 或 0 会怎样。假设输入 1 为 10 且输入 2 为 15 或者如果输入 1 为 15 且输入 2 为 10 那么XOR 将 return "5"。但是为什么在这种情况下 XOR 输出是“5”?
任何有助于我更好地理解输入与其 XOR 输出之间关系的想法都将不胜感激,希望是以一种不太技术性的方式!
XOR
是位运算。它将处理每一位。
0 xor 0 = 0
0 xor 1 = 1
1 xor 0 = 1
1 xor 1 = 0
例如 6 是 0b110
3 是 0b11
,所以 6 xor 3 是 0b101
即 5
XOR 适用于二进制。它只有 returns 1,如果一个数字在与另一个零相同的位中有一个 1。所以在这个例子中:
In [8]: bin(5)
Out[8]: '0b101'
In [9]: bin(6)
Out[9]: '0b110'
In [13]: 5^6
Out[13]: 3
In [10]: bin(3)
Out[10]: '0b11'
最左边的位是 1,所以它们清零。下一个值是 1 和 0,因此接下来的两位接收到 1,在 5^6 的情况下得到答案 3。
当对每一个排列的1和0进行异或运算时,你可以通过对每一位进行这样的运算来解出答案:
0^0 is 0
1^0 is 1
1^1 is 0
5 is 0b101
6 is 0b110
so for 5^6 = 3
the answer is
3 is 0b011