是否可以使用“按位与非”来定义所有按位运算符,类似于仅使用“布尔与非”就可以构建所有布尔逻辑的方法?


9

Nand 之所以称为“通用”逻辑门,是因为它允许您定义所有其他布尔逻辑门:

not(x) = nand(x,x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
nor(x, y) = not(or(x, y))
xor(x, y) = nand(nand(a, nand(a, b)), nand(b, nand(a, b)))

这被称为nand-logic,并且在现代计算机中经常使用,因为可以使晶体管的行为类似于nand-gate。

我想知道是否可以对按位运算执行类似的操作。可以在例如逐位NAND(bnand)来定义bnotborbandbnorbxor?有通用的按位运算吗?

Answers:


13

在硬件级别上,按位与逻辑之间没有区别。所以,是的。逻辑运算只是对单个位的按位运算。


2

在大多数现代微处理器上,按位运算是本地实现的,因此使用NAND操作没有任何好处。

例如,x86指令集具有:ANDORXORNOT。据我所知,所有这些操作都是在一个周期内完成的,因此用几个NAND操作代替它们不会有任何好处。它还具有与ANDN等效的功能,((NOT x) AND y)该功能可以由聪明的优化编译器生成以获取周期。

RISC运动试图推动精简指令集的一个简单的更好的性能架构。想法是,编译器必须组合更简单和更快的指令。但是,似乎除了某些实验或教学处理器之外,大多数处理器都提供本机NAND以及常规的按位运算(例如PowerPCARM)。


我确实不知道这些天如何在CPU中实现布尔运算符,但是使用4比1多路复用器将“真值表”作为4个输入,然后使用这两位来实现是很普遍的。作为输出的选择器。为您提供一个可用于所有16个二操作数布尔函数的电路。
Vatine 2013年

2
“或”,“异或”和“非”实现是“本机”的,并且只需要一个时钟周期,这一事实并没有说明它们是否仅使用NAND电路构建。我怀疑这些天它们仅使用NAND来构建,因为晶体管确实非常便宜且非常快。Vatine的4比1方法经过优化,可使用少量晶体管,这在纳米时代是毫无意义的。
马丁·马特

时间已使RISC变得毫无意义。当它出现时,典型的复杂指令要花费多个时钟周期,例如10个左右。而且这与OR / AND / NOT无关,它们已经很快并且被认为是“简单”的,对于任何CPU都是必不可少的,因此RISC处理器当然不会丢弃它们。今天,复杂指令取小于一个时钟周期(由于流水线和多线程/多核心。
马丁玛特
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.