这可以与其他有点明智的门一起使用吗?

时间:2013-10-06 17:12:17

标签: python

我一直在研究这个有点明智的门。

a=0b01100001
b=0b01100010

bin((a ^ 0b11111111) & (b ^ 0b11111111))

>>>0b10011100

所以我想知道你如何调整它以适用于nand gate和该实例的任何其他工具。

>>> bin((a ~ 0b11111111)& (b ~ 0b11111111))
SyntaxError: invalid syntax

>>> bin((a ^ 0b11111111) ~ (b ^ 0b11111111))
SyntaxError: invalid syntax

不起作用。

1 个答案:

答案 0 :(得分:2)

你应该从这里开始:https://wiki.python.org/moin/BitwiseOperators

  • x << y
    返回x,其中位向左移位y位(右侧的新位为零)。这与将x乘以2 ** y相同。
  • x >> y
    返回x,位向右偏移y位。这与//'x by 2 ** y相同。
  • x & y
    是“按位和”。如果y的x AND的相应位为1,则输出的每个位为1,否则为0。
  • x | y
    是“按位还是”。如果y的x AND的相应位为0,则输出的每个位为0,否则为1。
  • ~ x
    返回x的补码 - 通过将每个1切换为0并将每个0切换为1得到的数字。这与-x - 1相同。
  • x ^ y
    是“按位排他性”还是“。如果y中的位为0,则输出的每个位与x中的相应位相同,如果y中的位为1,则它是x中位的补码。

根据维基百科:

  

函数NAND(a1,a2,...,an)在逻辑上等同于NOT(a1 AND a2 AND ... AND an)。

因此,为了在Python中对操作数ab进行逐位NAND操作:

~(a & b)

你可以把它放到一个函数中:

bnand = lambda a, b: ~(a & b)

相应的非按位NAND将是:

not (a and b)

因此请确保您不要混淆and&(以及not~);逻辑运算符也是小写的。

P.S。另外,请务必阅读:Python: unsigned 32 bit bitwise arithmetic