如何在Python中进行按位NOR门(编辑python数学为我工作)

use*_*377 0 python bit-manipulation bitwise-operators

说我写这个:

a=01100001 
b=01100010 
c=01100011 
d=01100100 
e=01100101 
Run Code Online (Sandbox Code Playgroud)

现在,每个字母都与给定的数字类似,我将如何处理相似的值:

Python会想要这样做:

a + b = 2200011
Run Code Online (Sandbox Code Playgroud)

但我想要它做的就是这个

  • 如果尝试将0和0加在一起,则显示1
  • 如果尝试将1和0加在一起,则显示0
  • 如果尝试将0和1加在一起,则显示0
  • 如果尝试将1和1加在一起,则显示0

我想做的是 a + b = 10011100

有没有办法在这个实例中编辑python算出数学的方式?

到目前为止,我已经给出了设置值来表示字母,但我想做的是改变python给我结果的方式来匹配上面的解释中的XOR门

所以任何人都可以给出代码的例子来给出设定值(1 + 1 = 0)(0 + 0 = 1)...例如

Max*_*amy 8

你说:

我想做的是a + b = 10011100

我的解决方案

>>> a=0b01100001
>>> b=0b01100010

>>> bin((a | b) ^ 0b11111111)
'0b10011100'
Run Code Online (Sandbox Code Playgroud)

现在,为了解释:

您要求进行NOR按位操作(如果不明显,请http://en.wikipedia.org/wiki/NOR_gate):

r = not (a or b)
Run Code Online (Sandbox Code Playgroud)

此外,您可以使用De Morgan定律,它表示它相当于:

r = (not a) and (not b)
Run Code Online (Sandbox Code Playgroud)

在Python中:

>>> bin((a ^ 0b11111111) & (b ^ 0b11111111))
'0b10011100'
Run Code Online (Sandbox Code Playgroud)

你可能也想知道那是什么^ 0b11111111.好吧,not a相当于a xor 1xor^python 编写.如果你不是100%确信,我建议你写下逻辑表.所以基本上,^ 0b11111111将0更改为1,将1更改为0.

bin函数给出了作为参数给出的数字的二进制表示.所述0b在号码的开头是指数在基座2(否则它是基体10)给出.

编辑:

最初,我对这个问题的第一个想法是:

bin(~(a|b))
Run Code Online (Sandbox Code Playgroud)

但结果是'-0b1100100'.这是因为在Python中,数字是签名的.但是也可以通过保留第一个字节来获得良好的结果:

>>> bin(~(a|b) & 0xff)
'0b10011100'
Run Code Online (Sandbox Code Playgroud)

编辑2:

我刚刚发现OP问了另一个问题,以便更好地理解我的答案.所以,如果你想知道为什么我使用XOR来做NOT,请在这里看到一个很好的解释:https://stackoverflow.com/a/19203069/1787973