python - How to do a bitwise NOR Gate in Python(编辑 python 数学为我工作)

标签 python bit-manipulation bitwise-operators

假设我要写这个:

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 1xor 是用 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/

相关文章:

c++ - 有效地删除字节数组中的低半字节 - C++

c++ - C++ 中从 24 位到 32 位的签名扩展

python - Pandas:将数据框划分为一些部分

python - 使用条件总和的结果创建 Pandas DataFrame 列

assembly - 分配给具有特定索引的位的好方法是什么?

C#- |和 & 运算符?

swift - 对范围内的值进行位操作

c# - 不按字节执行按位

python - 什么时候使用 super(Baseclass, self).__init__

python - 如何自动将特定的 MySQL 表从一台机器移动到另一台机器?