C 为什么K&;R&make&&;,| |逻辑and;,|按位计算,不是相反吗?
我知道C 为什么K&;R&make&&;,| |逻辑and;,|按位计算,不是相反吗?,c,language-design,C,Language Design,我知道=被选为相等,而=被选为赋值,因为他们认为人们做的赋值比检查相等要多——但他们肯定不认为会有比布尔逻辑更麻烦的事情 为什么不换一种方式,将&和|作为逻辑运算符?来自: 该语言命名后,快速变化仍在继续,例如引入了&&和|操作符。在BCPL和B中,表达式的计算取决于上下文:在if和其他比较表达式值与零的条件语句中,这些语言对and(&)和or(|)运算符进行特殊解释。在普通上下文中,它们按位操作,但在B语句中 if (e1 & e2) ... 编译器必须计算e1,如果它是非零,则计
=
被选为相等,而=
被选为赋值,因为他们认为人们做的赋值比检查相等要多——但他们肯定不认为会有比布尔逻辑更麻烦的事情
为什么不换一种方式,将&
和|
作为逻辑运算符?来自:
该语言命名后,快速变化仍在继续,例如引入了&&
和|
操作符。在BCPL和B中,表达式的计算取决于上下文:在if和其他比较表达式值与零的条件语句中,这些语言对and(&
)和or(|
)运算符进行特殊解释。在普通上下文中,它们按位操作,但在B语句中
if (e1 & e2) ...
编译器必须计算e1
,如果它是非零,则计算e2
,如果它也是非零,则根据if详细说明语句。该需求在e1
和e2
中的和|运算符上递归下降。在这种“真值”背景下,布尔运算符的短路语义似乎是可取的,但运算符的重载很难解释和使用。在Alan Snyder的建议下,我引入了&&
和|
操作符,使机制更加明确。
记住C不是在真空中产生的;它的许多古怪之处都可以追溯到BCPL和B。你“知道”那=
和=
就是这样选择的吗?为什么?你的消息来源是什么?该消息来源是否也讨论了&
与&
之间的关系?亲密的选民,这怎么不具有建设性?合法的语言设计问题。丹尼斯·里奇关于|
,和&
的历史:@sarnold将此作为一个答案发布?@luxun:如果它只对你有用,而且只有你,那么这不是问问题的合适平台。我是谁来评判?,SO社区给予每个人和任何对社区做出承诺的人这一权利,他们通过为社区赚取一定数量的声誉点数和贡献。我恰好是其中之一。我有权对我认为不适合在这里的问题进行投票,我将决定是否有人(包括你)不管你喜不喜欢我行使我的权利。我会接受这个,但是@sarnold真的首先得到了答案。@luxun,如果你觉得里奇的描述足够好的话,请接受这个。约翰花了些时间把报价单很好地复制和格式化了