1)为什么没有逻辑运算符赋值,就像有加法和减法赋值一样呢?
bool a = true;
bool b = false;
a = a || b;
a ||= b; // syntax error!
a |= b; // OK.
2)在布尔变量上应用位运算符的含义是什么?与使用逻辑运算符是否相同?
1)为什么没有逻辑运算符赋值,就像有加法和减法赋值一样呢?
bool a = true;
bool b = false;
a = a || b;
a ||= b; // syntax error!
a |= b; // OK.
2)在布尔变量上应用位运算符的含义是什么?与使用逻辑运算符是否相同?
确实,C语言中缺少&&=
和||=
。我认为其中一个原因是在C语言中,逻辑AND和OR会执行短路计算,在简写形式中这会有点奇怪。但是不要使用位运算赋值运算符来代替它们。相反,只需编写:
a = a && b;
c = c || d;
如果您有规范的真/假值(1和0),则按位运算符将起作用。但是,如果应用于非规范化的值,例如5和2,则会得到不同的结果(5 && 2为1,但5 & 2为0)。
&&
和 ||
运算符的短路计算意味着只有在需要确定结果时才会评估第二个操作数。例如,如果你有 0 && x
,那么 x
不会被评估,因为你已经知道答案是 0
。同样地,如果你有 1 || y
,那么 y
不会被评估,因为你已经知道答案是 1
。这在第二个操作数评估较慢(例如一个函数调用)或者具有副作用的情况下非常重要。 - Tom Karzesa |= b
的意思与 a = (a | b)
相同,只是 a 的地址只被计算一次。然后您需要查找提升规则和布尔赋值的规则。
||=
和&&=
。 - bolov||=
,&&=
等”还是“在布尔变量上应用位运算符的含义是什么”。 - Spikatrix