#include "stdio.h"
void main()
{
int i, j, k=10;
i=(j=k)>0;
j=i==j;
printf("%2d,%2d",i,j);
k=!i==++j;
printf("%2d", i, j, k);
}
i=(j=k)>0; 先赋值,j=k=10,然后判断j>0,将判断结果赋值给i。因为10>0,所以i=1
j=i==j;先执行i==j,显然不相等,所以j=0
k=!i==++j,先执行!i,因为i=1,所以!i=0,然后执行++j,因为j=0,所以++j后j为1,因为0!=1,所以k=0
仅供参考,你查一下运算符优先级再确认下:
#include <stdio.h>
int main()
{
int i, j, k=10;
// 先j=k赋值操作结果为j=10然后10大于0的结果为真,结果赋值给i,所以i等于1
i=(j=k)>0;
// 判断i==j,两者不相等,结果为假,结果赋值给j,j等于0
j=i==j;
printf("%2d,%2d\n",i,j);
// 先执行!i,上一步i等于1,所以!i等于0,执行++j执行完后j等于1,比较0==1不成立,结果为假,结果赋值给k 所以k=0
k=!i==++j;
printf("%2d,%2d,%2d\n", i, j, k);
}