Python operator.xor 的奇怪行为
Odd behavior of Python operator.xor
我正在研究一个加密谜题,需要取两个二进制数的异或(我在 Python 中使用 operator
包)。例如,如果我 运行 operator.xor(1001111, 1100001)
我得到非常奇怪的输出 2068086
。为什么不 return 0101110
或至少 101110
?
计算出的答案是使用您提供的十进制值,而不是它们的二进制外观。你真正想问的是...
1001111 ^ 1100001
当你的意思是79 ^ 97
。而是尝试使用二进制文字......
0b1001111 ^ 0b1100001
有关详细信息,请参阅 How do you express binary literals in Python?。
因为 Python 不认为它是二进制数。而是使用:
operator.xor(0b1001111, 0b1100001)
因为1001111
和1100001
不是二进制数。 1001111
是一百万、一千、一百一十一,而1100001
是一百万、十万零一。 Python 无法将这些识别为二进制数。二进制数必须加0b
前缀才能被识别为Python/Python中的二进制数 3. 所以正确的做法是这样的:
operator.xor(0b1001111, 0b1100001)
但是嘿!我们得到 46
作为输出。我们应该解决这个问题。幸运的是,Python/Python 中有一个 built-in 3。它是函数 bin(n)
。该函数打印一个二进制数字,前缀为 0b
。所以我们的最终代码是:
bin(operator.xor(0b1001111, 0b1100001))
如果我们想隐藏 0b
(主要是在屏幕上打印该数字的情况下),我们应该像这样使用 [2:]
:
bin(operator.xor(0b1001111, 0b1100001))[2:]
更短的方法(警告看起来像是您*应该*已经知道的教程)
好吧,operator.xor()
对于运算符来说太大了:)
如果是这种情况 (99.9%),您应该使用 a^b
。我想您已经知道这一点,但为什么只为 xor 运算符导入整个模块呢?如果您喜欢键入单词 xor
,请像这样导入 operator
模块:from operator import a, b...
。然后像这样使用:bin(xor(a,b))
。我希望你已经知道这些东西,但我想确保你更喜欢编码 :)
我正在研究一个加密谜题,需要取两个二进制数的异或(我在 Python 中使用 operator
包)。例如,如果我 运行 operator.xor(1001111, 1100001)
我得到非常奇怪的输出 2068086
。为什么不 return 0101110
或至少 101110
?
计算出的答案是使用您提供的十进制值,而不是它们的二进制外观。你真正想问的是...
1001111 ^ 1100001
当你的意思是79 ^ 97
。而是尝试使用二进制文字......
0b1001111 ^ 0b1100001
有关详细信息,请参阅 How do you express binary literals in Python?。
因为 Python 不认为它是二进制数。而是使用:
operator.xor(0b1001111, 0b1100001)
因为1001111
和1100001
不是二进制数。 1001111
是一百万、一千、一百一十一,而1100001
是一百万、十万零一。 Python 无法将这些识别为二进制数。二进制数必须加0b
前缀才能被识别为Python/Python中的二进制数 3. 所以正确的做法是这样的:
operator.xor(0b1001111, 0b1100001)
但是嘿!我们得到 46
作为输出。我们应该解决这个问题。幸运的是,Python/Python 中有一个 built-in 3。它是函数 bin(n)
。该函数打印一个二进制数字,前缀为 0b
。所以我们的最终代码是:
bin(operator.xor(0b1001111, 0b1100001))
如果我们想隐藏 0b
(主要是在屏幕上打印该数字的情况下),我们应该像这样使用 [2:]
:
bin(operator.xor(0b1001111, 0b1100001))[2:]
更短的方法(警告看起来像是您*应该*已经知道的教程)
好吧,operator.xor()
对于运算符来说太大了:)
如果是这种情况 (99.9%),您应该使用 a^b
。我想您已经知道这一点,但为什么只为 xor 运算符导入整个模块呢?如果您喜欢键入单词 xor
,请像这样导入 operator
模块:from operator import a, b...
。然后像这样使用:bin(xor(a,b))
。我希望你已经知道这些东西,但我想确保你更喜欢编码 :)