关于运算级的问题今天看C++的书 发现下面一个问题的答案有点奇怪如果X,Y,Z都为1 则执行表达式W=++X||++Y&
关于运算级的问题
今天看C++的书 发现下面一个问题的答案有点奇怪
如果X,Y,Z都为1 则执行表达式W=++X||++Y&&==Z后
X,Y,Z的值等于
答案竟然为:X=2,Y=1,Z=1
我认为应该是:X=2,Y=1,Z=2
不知道大家怎么认为,说说理由
[解决办法]
|| 从左到右运算
当第一个表达式为真后,后面的不在进行计算.
[解决办法]
ls正解,先算++x所以x=2(为真值),因此||后面的不参与计算,y=1,z=1.如此而已
[解决办法]
w = ++x || ++y && ++z
优先级 || 比 && 高
故上面结合是
w = ++x || (++y && ++z)
对于逻辑关系预算符,计算时有短路运算,即
A || B,如果表达式A的值是true,那么整个表达式的值肯定也是true,所以就没必要再取计算表达式B的值,同理
A && B,如果表达式A的值是false,那么也就不会再去计算B的值。
所以上面的表达式中,先算++x的x是2,非零为真,因此后面的表达式(++y && ++z)就不会被计算了。
[解决办法]
W=++X||++Y&&==Z
加上括号后:
W=(++X||(++Y&&++z))
++X==2
2=true,所以||表达式值为true,(++Y&&++Z)不再运算.
所以W=ture,X=2,Y=1,Z=1.
[解决办法]
优先级只是决定了操作数的结合方式,不代表运算顺序说优先级高的就先计算
