http://www.cnblogs.com/aoaoblogs/archive/2012/05/02/2478758.html
早期的c木有从操作符上区分逻辑运算&&/||和位逻辑运算&/|,(晓得了不?)。&和|使用"真值上下文"(继承自B和BCPL)思想解释其意义:如果是在"if"、“while”什么的后面,因为要求这里必须是一个布尔表达式,因此&和|都是被当成现在的&&和||在解释;普通表达式里面&和|才被解释成位逻辑运算。这办法还不错,除了有点理解障碍。(There was the notion of "top-level operators" in a truth-value context.
)
当时&和|的优先级和现在的&和|是一样的。
在Alan Snyder的强烈要求下,&&和||被添加到c里面,由此分离了位逻辑运算符和逻辑运算符。但是吧,关于这个优先级问题我总有一种寒从脚底生的赶脚,比如我们会看到很多酱的代码:
if (a==b & c==d) ...(抖...)
现在看哈可能把&的优先级提高到高于==更好,但是当时的话可能还是只是对&和&&做个区分,别去修改既有&操作符的优先级更稳妥一些。(毕竟,俺们有成千上万的源码哇。。maybe 3 installations。。。