Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 为什么K&;R&make&&;,| |逻辑and;,|按位计算,不是相反吗?_C_Language Design - Fatal编程技术网

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,如果你觉得里奇的描述足够好的话,请接受这个。约翰花了些时间把报价单很好地复制和格式化了