初始值:i=10,j=3,k=0
表达式 i==1 && (j==3 || (k=k+1))
计算顺序是:
先计算i==1,i=10,i==1不成立
&&运算时,如果&&左侧为假,右侧就不再执行,因为当&&左侧为假时,右侧不管真假,整体的运算结果都是假,所以,
当&&左侧为假时,编译器就不再执行&&右侧的运算了,所以,在这个表达式中(j==3 || (k=k+1))是不执行的
i、j、k的值不变,仍然是 i=10,j=3,k=0
表达式:i==1 && j==3 || (k=k+1)
计算顺序从做到右,i==1不成立,所以&&右侧的j==3不执行,执行k=k+1,k=1
所以,最后i=10,j=3,k=1
在表达式 i==1 && (j==3 || (k=k+1))中,&&右侧在一个()中,()中的内容看做一个整体。
在表达式i==1 && j==3 || (k=k+1)中,&&右侧没有(), 只有j==3参与 &&运算
注意两者的差别
逻辑运算&&和||有短路特性。
逻辑运算的工作原理是:
表达式A && 表达式B :
如果A的值为假就返回假(0值)并且不执行表达式B,否则执行表达式B并且返回B的真(1值)/假(0值)结果
表达式A || 表达式B :
如果A的值为真就返回真(1值)并且不执行表达式B,否则执行表达式B并且返回B的真(1值)/假(0值)结果
i=10,j=3,k=0
若表达式是 i==1 && (j==3 || (k=k+1))
先计算i==1为假则表达式直接返回假(0), &&之后的 (j==3 || (k=k+1) 就不执行了
i,j,k的值还是10 3 0
若表达式是 i==1 && j==3 || (k=k+1)
&& 优先级高于 ||
先计算i==1 && j==3
i==1为假则 &&之后的 j==3 就不执行了, i==1 && j==3返回假(0),
之后计算 0 || (k=k+1)
0为假则继续计算||之后的 (k=k+1), k变为1 ,1为真表达式返回真(1值),
之后i=10,j=3,k=1
i==1 && j==3 || k=k+1 表达式不符合语法
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
分别是1,0,1