int a = 1, b = 2, c = 3;
bool z = a >= b || b == c && !b && !!a;
cout << z << endl;
我想知道为什么这段代码会打印
0
。
我不知道从哪里开始,尽管我知道
>=
具有最高优先级。
这是否意味着 a
与所有 (b || b == c && !b && !!a)
进行比较,还是仅与 b
进行比较?
运算符具有更高的优先级意味着它首先被评估;
x >= y || z
表示 (x >= y) || z
。a < b || c < d
是“a 小于 b,或 c 小于 d”,而不是“a 小于(b 或 c)小于 d”,这是无意义的。)
要解决这个问题,请从最高优先级到最低优先级添加括号。
!
的优先级最高,所以
a >= b || b == c && (!b) && (!(!a))
接下来是关系运算符,
(a >= b) || b == c && (!b) && (!(!a))
然后平等,
(a >= b) || (b == c) && (!b) && (!(!a))
然后
&&
,与左侧关联:
(a >= b) || (((b == c) && (!b)) && (!(!a)))
然后只剩下
||
,所以你不需要做任何事情。
所以你有
(1 >= 2) || (((2 == 3) && (!2)) && (!(!1)))
这是
(1 >= 2) || (((2 == 3) && (2 == 0)) && (!(1 == 0)))
这是
false || ((false && false) && true)
这是
false
我知道
具有最高优先级,但这是否意味着>=
与整个a
进行比较?或者只是(b || b == c && !b && !!a )
。b
好吧,让我们想想。假设你有
1 * 2 + 3
。从您使用的相同优先级表中,您可以看到 *
的优先级高于 +
。这是否意味着 1
乘以 2 + 3
还是只是 2
?