为什么要创建逻辑运算符?

Why were Logical Operators created?

几乎所有的编程语言都有逻辑运算符的概念 我想知道为什么要创建逻辑运算符。我用谷歌搜索并发现它是为基于条件的操作而创建的,但我认为这是一种用法。

我很想知道如果没有这个操作员,人们会面临哪些挑战。请尽可能举例说明。

I am interested in the answer that what are the challenges people faced without this operator.

超级详细的深度嵌套 if() 条件,尤其是循环条件。

while (a && b) {
    a = something;
    b = something_else;
}

没有逻辑运算符的写法变成:

while (a) {
    if (!b) break;   // or if(b){} else break;  if you want to avoid logical ! as well
    a = something;
    b = something_else;
}

of如果你不想循环,要不要这样写?

if (c >= 'a') {
    if (c <= 'z') {
        stuff;
    }
}

不,你当然不需要,因为与 if (c >= 'a' && c <= 'z') 相比,它太可怕了,特别是如果有一个 else,或者这是在另一个嵌套中。特别是如果您的编码风格规则要求每个嵌套级别有 8-space 缩进,或者 { 在其自己的行上使得每个嵌套级别吃得更垂直 space。


请注意 a&b 等同于 a&&b:即使除了短路评估 。 (如果 a 为假,甚至不会评估 b。)例如2 & 1 是错误的,因为它们的整数位模式没有任何相同的位集。

短路评估允许像 while(p && p->data != 0) 这样的循环条件检查 NULL 指针,然后有条件地只对非 NULL 做一些事情。

当使用纸质电传打字机在慢速串行线上对计算机进行编程时,紧凑的表达式非常重要。


另请注意,这些纯粹是级语言设计考虑因素。 CPU 硬件没有逻辑运算符之类的东西;通常需要多条指令才能在整数上实现 !(变成 0/1 整数,而不是用作 if 条件时)。

if (a && b) 通常编译为连续的两条 test/branch 指令。