假设我要写这个:
a=01100001
b=01100010
c=01100011
d=01100100
e=01100101
现在每个字母都类似于给定的数字,我将如何处理相似的值:
Python 会这样做:
a + b = 2200011
但我想让它做的是这个
- 如果尝试将 0 和 0 加在一起显示 1
- 如果尝试将 1 和 0 加在一起显示 0
- 如果尝试将 0 和 1 加在一起显示 0
- 如果尝试将 1 和 1 加在一起显示 0
我想做的是 a + b = 10011100
在这种情况下,有没有办法编辑 python 计算数学的方式?
到目前为止,我已经给出了代表字母的设置值,但我想做的是改变 python 给我结果的方式,以匹配上面解释中的 XOR 门
所以任何人都可以给出代码示例来给出设置值 (1+1=0)(0+0=1) ...例如
最佳答案
你说:
What I wish to do is 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
关于python - How to do a bitwise NOR Gate in Python(编辑 python 数学为我工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19197495/