为什么在C语言中移位的优先级比加法和减法低?

为什么在C语言中移位的优先级比加法和减法低?,c,operator-precedence,C,Operator Precedence,在进行位操作时,我有时会觉得这很不方便(尽管我现在记不起任何具体的例子)。我还发现它在概念上令人困惑,因为移位基本上是二的乘除 P>我发现,在使用C++时,使用C++是很方便的,因为这是C语言作者决定的。 使用括号避免混淆。没有更好的答案吗?并不是说这不正确,而是作者们有什么原因吗?我相信他是在问“他们到底在想什么?”我经常也在想同样的问题。我想大家都同意,让这些乘法运算符的优先级低于加法是C语言最大的错误之一,但这是无法纠正的。往前走,这里什么也看不见…@R..:enum{FOO,BAR};

在进行位操作时,我有时会觉得这很不方便(尽管我现在记不起任何具体的例子)。我还发现它在概念上令人困惑,因为移位基本上是二的乘除


<> P>我发现,在使用C++时,使用C++是很方便的,因为这是C语言作者决定的。
使用括号避免混淆。

没有更好的答案吗?并不是说这不正确,而是作者们有什么原因吗?我相信他是在问“他们到底在想什么?”我经常也在想同样的问题。我想大家都同意,让这些乘法运算符的优先级低于加法是C语言最大的错误之一,但这是无法纠正的。往前走,这里什么也看不见…@R..:
enum{FOO,BAR};flags=FOO注:C基于前面的语言,如Algol。在Algol shl中,shr的优先级高于*,/而在C中>的优先级较低。IMO:移位执行乘法,因此它们应该具有相同(或更高)的乘法优先级。此外,它们并不是C语言中与运算符相关的语法的唯一愚蠢选择。所有的
+=*=
最好保持关联性,因此您可以编写
a+=b+=4
来将内容添加到
a
中(在C++中很重要)。那么,你可以在C++中使用格式化输出运算符,它比今天的<代码>工作得更好。