Python operator.xor

时间:2016-01-08 20:33:56

标签: python bitwise-operators xor

我正在处理加密难题,我需要使用独占或两个二进制数字(我在Python中使用operator包)。例如,如果我运行operator.xor(1001111, 1100001),我会得到非常奇怪的输出2068086。为什么不返回0101110或至少101110

3 个答案:

答案 0 :(得分:9)

因为Python没有将其视为二进制数字。而是使用:

operator.xor(0b1001111, 0b1100001)

答案 1 :(得分:7)

计算出的答案是使用您提供的十进制值,而不是二进制外观。你真正要问的是......

79 ^ 97

当你的意思是0b1001111 ^ 0b1100001 时。而是尝试使用二进制文字......

Ember.Object

有关详细信息,请参阅How do you express binary literals in Python?

答案 2 :(得分:0)

因为11000011001111不是二进制数字。 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。我希望你已经知道这些东西,但我想确保你更喜欢编码:)