这个程序,a++<0,先做了a<0,为假,那么a+1还做不做呢,输出的a为多大呢。
会,输出为3。
逻辑与运算符 && 表达式的计算遵循如下原则:
第一个操作数将完全计算,并且在继续计算逻辑“与”表达式之前将完成所有副作用。
仅当第一个操作数的计算结果为 true 时才计算第二个操作数。
用心回答每个问题,如果有帮助,请采纳答案好吗,谢谢~~~
是++a,问题中写错了。
你这个是++a a先自增在去比较
因为a=2,++a<0实际上是(++a)<0,++a为3,此时a为3.但++a<0为false,所以if条件不成立,转而执行else,打印出a的值为3.
++a是先将a的值+1再进行运算,当前a=2,到if判断里先做+1操作 即a=3,<0判断为假,X&&Y如果x为假则不进行后面的判断,所以打印出来的a的值是3
a++的话直接输出3.判断a++<0之后a就自增1变为了3
你如果在后面加一句a<b的判断的话就不成立了((a++<0&&a<b) = false)
这个比较简单,看下反汇编,如下,是先自增了,然后在比较的。
int a=2,b=3;
00413E2D mov dword ptr [ebp-14h],2
00413E34 mov dword ptr [ebp-20h],3
if ((++a<0)&&(b==3))
00413E3B mov eax,dword ptr [ebp-14h] ///////a 放到eax中, 下一行是加一了
00413E3E add eax,1
00413E41 mov dword ptr [ebp-14h],eax
00413E44 jns main+5Eh (413E4Eh)
00413E46 cmp dword ptr [ebp-20h],3
00413E4A jne main+5Eh (413E4Eh)