说我要写这个:
a=01100001
b=01100010
c=01100011
d=01100100
e=01100101
每个字母类似于给定的数字,现在我将如何处理类似的值:
Python希望这样做:
a + b = 2200011
但我想要它做的是这个
我希望做的是a + b = 10011100
有没有办法编辑python在这种情况下计算数学的方式?
做得太远我已经给出了设置值来表示字母,但我想做的是改变python在上面的解释中给我的结果以匹配XOR门的方式
所以任何人都可以提供代码示例来给出设定值(1 + 1 = 0)(0 + 0 = 1)......例如
答案 0 :(得分:8)
你说:
我想做的是a + b = 10011100
我的解决方案:
>>> a=0b01100001
>>> b=0b01100010
>>> bin((a | b) ^ 0b11111111)
'0b10011100'
现在,为了解释:
您要求进行NOR按位操作(http://en.wikipedia.org/wiki/NOR_gate,如果它不明显):
r = not (a or b)
此外,您可以使用De Morgan的法律,该法律相当于:
r = (not a) and (not b)
在Python中:
>>> bin((a ^ 0b11111111) & (b ^ 0b11111111))
'0b10011100'
您可能也想知道^ 0b11111111
是什么。好吧,not a
相当于a xor 1
,xor
在python中写成^
。如果你不是100%确信,我建议你写下逻辑表。基本上,^ 0b11111111
将0更改为1,将1更改为0.
bin
函数给出作为参数给出的数字的二进制表示。数字开头的0b
表示该数字以2为基数给出(否则为10)。
修改强>
最初,我首先想到的是这个问题:
bin(~(a|b))
但结果是'-0b1100100'
。这是因为在Python中,数字是签名的。但是也可以通过仅保留第一个字节来获得良好的结果:
>>> bin(~(a|b) & 0xff)
'0b10011100'
编辑2:
我刚刚发现OP问了另一个问题,以便更好地理解我的答案。所以,如果你想知道为什么我使用XOR来做NOT,请在这里看一个很好的解释:https://stackoverflow.com/a/19203069/1787973
答案 1 :(得分:1)
你给了我们所有可能输入的“真值表”(感谢你)。如果两个输入都为0,则表示输出应为1,否则输出应为0.该逻辑运算的名称为NOR,即OR的否定。
请注意,您的输入是基数为10的数字,但它们似乎代表基数为2的数字或位集。所以我们应该做的第一件事就是将它们从基础10形式转换为基础2.简单(但不是过于高效)的方式是int(str(a), 2)
。
从那里开始,只需对数字进行NOR操作即可。从这里开始:https://wiki.python.org/moin/BitwiseOperators看起来你可以做~(x|y)
(否定OR,按位)。