为什么C / C ++中缺少逻辑运算符(&& =和|| =)的赋值?

时间:2016-04-10 07:45:42

标签: c operator-precedence

1)为什么逻辑运算符没有赋值,就像总和和差异一样?

bool a = true;
bool b = false;
a = a || b;
a ||= b; // syntax error!
a |= b;   // OK.

2)在布尔变量上应用bitwise运算符是什么意思?    它与使用逻辑运算符相同吗?

3 个答案:

答案 0 :(得分:4)

确实&&=||=从C中“缺失”。我认为一个原因是C中的逻辑AND和OR执行短路,这在缩写中会有点奇怪形成。但是不要在它们的位置使用按位赋值运算符。相反,只需写下:

a = a && b;
c = c || d;

如果您具有规范的真/假值(1和0),则按位运算符将起作用。但如果应用于非规范值,例如5和2,您将得到不同的结果(5&& 2为1,但5& 2为0)。

答案 1 :(得分:2)

a |= b表示与a = (a | b)相同,但a的地址仅评估一次。然后你查找促销规则,并分配给bool。

答案 2 :(得分:1)

C语言只允许使用这些复合语句

*= /= %= += -= <<= >>= &= ^= |=  

||=没有有效的语法。

请注意,C中的bool是整数类型。 true1false0。可以在bool上应用按位运算符。