我正在处理加密难题,我需要使用独占或两个二进制数字(我在Python中使用operator
包)。例如,如果我运行operator.xor(1001111, 1100001)
,我会得到非常奇怪的输出2068086
。为什么不返回0101110
或至少101110
?
答案 0 :(得分:9)
因为Python没有将其视为二进制数字。而是使用:
operator.xor(0b1001111, 0b1100001)
答案 1 :(得分:7)
计算出的答案是使用您提供的十进制值,而不是二进制外观。你真正要问的是......
79 ^ 97
当你的意思是0b1001111 ^ 0b1100001
时。而是尝试使用二进制文字......
Ember.Object
答案 2 :(得分:0)
因为1100001
和1001111
不是二进制数字。 1100001
是一百万,一千,一百一十一,而0b
是一百万,十万和一。 Python并不认为这些是二进制数。二进制数必须以operator.xor(0b1001111, 0b1100001)
为前缀,才能在Python / Python 3中被识别为二进制数。所以正确的方法是:
46
但是嘿!我们得到bin(n)
作为输出。我们应该解决这个问题值得庆幸的是,Python / Python 3中有一个内置函数。它是函数0b
。该函数打印一个二进制数字,前缀为bin(operator.xor(0b1001111, 0b1100001))
。所以我们的最终代码是:
0b
如果我们要隐藏[2:]
(主要是在屏幕上打印该号码的情况下),我们应该使用bin(operator.xor(0b1001111, 0b1100001))[2:]
,如下所示:
operator.xor()
更短的方式(警告看起来像是你应该*已经知道的教程)
好吧,a^b
对于运营商而言太大了:)
如果是这种情况(99.9%),则应使用xor
。我想你已经知道这个,但为什么要为xor运算符导入一个整个模块?如果您想改为输入单词operator
,请导入from operator import a, b...
模块,如下所示:bin(xor(a,b))
。然后像这样使用:POST
。我希望你已经知道这些东西,但我想确保你更喜欢编码:)