我知道==
选择它是为了相等和=
赋值,因为他们认为人们做的赋值比检查相等——但他们肯定不认为会有比布尔逻辑更多的摆弄吗?
为什么不反过来,使用&
并|
成为逻辑运算符呢?
我知道==
选择它是为了相等和=
赋值,因为他们认为人们做的赋值比检查相等——但他们肯定不认为会有比布尔逻辑更多的摆弄吗?
为什么不反过来,使用&
并|
成为逻辑运算符呢?
从马口中:
在语言被命名后,快速的变化仍在继续,例如&&
和||
运算符的引入。在 BCPL 和 B 中,表达式的计算取决于上下文:在 if 和其他将表达式的值与零进行比较的条件语句中,这些语言对 and (&
) 和 or (|
) 运算符进行了特殊解释。在普通上下文中,它们按位操作,但在 B 语句中编译器必须评估if (e1 & e2) ...
e1
,如果它不为零,则评估e2
,如果它也是非零,则详细说明依赖于 if 的语句。需求递归地下降到&
和 |e1
和内的运算e2
符 在这种“真值”上下文中,布尔运算符的短路语义似乎是可取的,但运算符的重载难以解释和使用。在 Alan Snyder 的建议下,我引入了&&
and||
运算符,使机制更加明确。
请记住,C 不是在真空中创建的。它的许多怪异之处可以追溯到 BCPL 和 B。