为什么K& R制造&&,||逻辑和&,|按位,而不是相反?

时间:2012-05-30 02:09:12

标签: c language-design

我知道==被选为平等,=被选为分配,因为他们认为人们做的任务比检查平等更多 - 但他们当然不认为会有更多比布尔逻辑有点小问题?

为什么不采用相反的方式,&|是逻辑运算符?

1 个答案:

答案 0 :(得分:9)

来自horse's mouth

在命名语言后继续快速更改,例如引入&&||运算符。在BCPL和B中,表达式的评估取决于上下文:在if和其他条件语句中将表达式的值与零进行比较,这些语言对and(&)和or({{1}运营商。在普通的上下文中,它们按位运行,但在B语句中
|
编译器必须评估 if (e1 & e2) ... ,如果它不为零,则评估e1,如果它也是非零,则根据if详细说明该语句。该要求在e2和|上以递归方式递减&e1内的运营商。这种“真值”上下文中的布尔运算符的短路语义似乎是可取的,但运算符的重载很难解释和使用。在Alan Snyder的建议下,我介绍了e2&&运算符,以使机制更加明确。

请记住,C不是在真空中创造的;它的大部分奇怪之处都可以追溯到BCPL和B.