6

我知道==选择它是为了相等和=赋值,因为他们认为人们做的赋值比检查相等——但他们肯定不认为会有比布尔逻辑更多的摆弄吗?

为什么不反过来,使用&|成为逻辑运算符呢?

4

1 回答 1

9

马口中

在语言被命名后,快速的变化仍在继续,例如&&||运算符的引入。在 BCPL 和 B 中,表达式的计算取决于上下文:在 if 和其他将表达式的值与零进行比较的条件语句中,这些语言对 and ( &) 和 or ( |) 运算符进行了特殊解释。在普通上下文中,它们按位操作,但在 B 语句中

    if (e1 & e2) ...
编译器必须评估e1,如果它不为零,则评估e2,如果它也是非零,则详细说明依赖于 if 的语句。需求递归地下降到&和 | e1和内的运算e2符 在这种“真值”上下文中,布尔运算符的短路语义似乎是可取的,但运算符的重载难以解释和使用。在 Alan Snyder 的建议下,我引入了&&and||运算符,使机制更加明确。

请记住,C 不是在真空中创建的。它的许多怪异之处可以追溯到 BCPL 和 B。

于 2012-05-30T02:42:35.543 回答