对于代码段
char c = 48; int i = 1, j = 10; j = !(c > j)&&i++;则i和j的值分别是1和0。请问这句话是正确的吗?
所以先算括号里的是必然的,j = !1 && i++;
那之后就是要根据优先级去算i++了吗?
当然不是,因为这时候我们的 !1和i++是&&的两个操作数;
先要遵守结合性;&&的结合性也就是运算顺序:从左到右
所以会先算!1 = 0;
j = 0 && i++;
而左边算完之后为0,又因为&&是有0就是0,岁月右边的i++不会计算;
最后i = 1, j = 0;
相关博客:https://blog.csdn.net/2302_76941579/article/details/134281219?spm=1001.2014.3001.5502
step1.判断优先级:()是一级优先级;!与 ++ 是二级优先级
step2.先计算括号内( c > j ) 为真 ——> 1
step3.计算 !与 ++ :
(c > j)为真——>! (c > j)为假——>0 ;step4. &&具有短路特性,左操作数为假,不会再计算右操作数,即此时
j = !(c > j)&&(不计算i++); j = 0; i不进行++,因此i仍等于1