1

非(!)逻辑有什么意义?似乎您可以做所有其他逻辑运算符不能做的所有事情。有什么我不能做的事情吗?

4

2 回答 2

1

您不会否认 NOT 运算符在编程语言中非常方便,即使该语言中可用的其他运算符和内置常量使其严格冗余。对于所有通用编程语言的几乎所有特性,方便是一个充分理由——事实上它是理由。如果我们不关心便利性——这在编程中意味着生产力——我们可以使用一组比任何汇编语言都小得多的图灵完备操作码来编写所有程序。

如果没有 NOT 运算符,您将面临的不便程度取决于您正在考虑的编程语言,特别是该语言提供的其他运算符和内置常量及其语义。

例如,在 C 中,相等运算符==存在,但没有表示真假的内置常量:所有位为 0 的任何整数值在布尔运算中表现为假,而所有其他整数值都表现为真。!cond如果cond计算结果为非零,则计算结果为 0,否则计算结果为 1。因此,cond如果没有编码!cond,你必须编写代码cond == 0,至少要多敲 2 次键。

与 C 一样,C++ 具有相等和不等运算符,但与 C 不同的是,它通过内置常量true和表示布尔真值false。因此,cond如果在没有编码的情况下,这在 C++ 中是不正确的,!cond您必须编写或者cond != truecond == false,至少多敲 5 次键。

并且不使用 NOT 运算符的成本可能会比轻微的不便更加复杂。你能先理解以下哪一项?:

!(p && !q) == (!p || q)

或者:

(((p && (q == 0)) == 0) == ((p == 0) || q)
于 2014-04-07T09:43:17.593 回答
0

您可以仅使用 NAND 运算符实现所有逻辑运算符。NOT 运算符是为了方便起见,就像所有其他运算符一样。事实上,计算机系统仅使用 NAND 或 NOR 运算符来实现。所有其他运算符都是为了方便而放置的抽象。

不过,这方便。既然你提到了“!” 运算符,我假设您的意思是通用编程语言中的布尔运算符。那么not操作符就很方便了。想象一下,您想表达“打印除 'Bob' 之外的所有名称”之类的内容。您可以使用 != 运算符来做到这一点,它是 !(expression1 == expression2) 的进一步缩写形式:

if( !(name == 'Bob') ) {
    print name
}
于 2014-04-06T22:29:27.527 回答