C值为什么等于3

来源:百度知道 编辑:UC知道 时间:2024/06/06 02:43:38
设int i=2,j=3,k=4,a=4,b=5,c=3;请问执行表达式(a=i<j)&&(b=j>k)&&(c=i,j,k)后,c值是( 3 )。

i<j 所以 a=1,(a=i<j)的式子等于1,所以继续看(b=j>k)这个式子,j>k不成立,则b=0,由于是&&,所以不需要看后面的式子,这个表达式的值为0,(c=i,j,k)这个表达式没有运行 ,所以c的值不变,如果(b=j>k)这个式子为1 的话,那么就会运行(c=i,j,k),这时c值将会被改变。

这里是反汇编代码 供你分析.
由于B=0所以后面的表达式短路了.不执行了.
int i=2,j=3,k=4,a=4,b=5,c=0;
0041137E mov dword ptr [i],2
00411385 mov dword ptr [j],3
0041138C mov dword ptr [k],4
00411393 mov dword ptr [a],4
0041139A mov dword ptr [b],5
004113A1 mov dword ptr [c],0
//请问执行表达式
(a=i<j)&&(b=j>k)&&(c=i,j,k);
004113A8 mov eax,dword ptr [i]
004113AB xor ecx,ecx
004113AD cmp eax,dword ptr [j]
004113B0 setl cl
004113B3 mov dword ptr [a],ecx
004113B6 cmp dword ptr [a],0
004113BA je wmain+76h (4113D6h)
004113BC mov edx,dword ptr [j]
004113BF xor eax,eax
004113C1 cmp edx,dword ptr [k]
004113C4 setg al
004113C7 mov dword ptr [b],eax
004113CA cmp dword ptr [b],0
004113CE je wmain+76h (4113D6h)
0