NAND、NOR、XNOR 的逻辑运算符优先级

Posted

技术标签:

【中文标题】NAND、NOR、XNOR 的逻辑运算符优先级【英文标题】:Logical operators priority with NAND, NOR, XNOR 【发布时间】:2011-12-31 08:28:01 【问题描述】:

我在网上搜索过,但没有找到解决此问题的方法。

运算符NANDNORXNOR 的逻辑优先级是什么?

我的意思是,以表达式为例

A AND B NAND C

应该首先评估哪个运算符? 显然NAND可以翻译成NOT-AND(因为NORNOT-ORXNORNOT-XOR),但是

(A AND B) NAND C != A AND (B NAND C) = A AND NOT(B AND C)

根据我的研究,这种表达式没有明确的优先级,所以我认为最简单的解决方案是根据它们在表达式中出现的顺序来评估运算符,但我可能错了。

有什么建议吗?

【问题讨论】:

【参考方案1】:

这实际上取决于您的precedence rules。如果没有顺序(没有优先规则或相同重要性的所有内容),则应从左到右解决。 Here 是 C++ 的一个示例。

【讨论】:

【参考方案2】:

运算符优先级必须由一种语言定义,而您在这里所拥有的似乎不是一种正式的语言,在这种情况下,通常假定您在从左到右阅读时对其进行评估。

不过,您可以使用与 verilog 相同的运算符优先级,或者查看wikipedia,它具有通常用于逻辑运算符的小表优先级

【讨论】:

【参考方案3】:

如果表达式的编写方式与问题中提到的方式相同(中间没有括号),则应按照编写顺序解决。这是唯一正确的方法。 例如。如果写成A NOR B XOR C,就表示(A NOR B) XOR C

【讨论】:

【参考方案4】:

布尔运算符在传统算术中具有类似物,因此确定优先规则应该是什么的一种方法是遵循传统算术的规则,例如AND 类似于乘法,而OR 类似于加法,因此AND 的优先级应该高于OR。如果您查看诸如 C 或 C++ 之类的语言的运算符优先级表,您会发现在这些和其他相关语言中确实是这种情况。

【讨论】:

【参考方案5】:

我想这可能是特定于语言的,所有运算符都必须具有特定实现定义或暗示的优先顺序。

Here 是另一个网站对此的看法。

【讨论】:

以上是关于NAND、NOR、XNOR 的逻辑运算符优先级的主要内容,如果未能解决你的问题,请参考以下文章

VHDL操作符

标准布尔运算顺序

C# 中是不是有 XNOR(逻辑双条件)运算符?

Verilog语法--Gate门

13.Verilog的门级建模延迟建模

Verilog门级建模