c语言中在if里判断a++的疑问

这个程序,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)