#include <stdio.h>
int main()
{
int a=1,b=2,m=0,n=0,k;
k=(n=b>a)||(m=a<b);
printf("%d,%d\n",k,m);
return 0;
}
n=b>a,因为b>a返回真(即n=1)
因为n=1,或操作有一个为真,后面的条件不再执行,即m=a<b不执行。
因为返回真,所以k=1
n=1
m=0
k=1
提示:>和<号比较出来的结果自动变为0或1,正确即为1
这是一道运算符优先级和运算符短路问题
#include <stdio.h>
int main()
{
int a = 1, b = 2, m = 0, n = 0, k;//m赋值为0
k = (n = b > a) || (m = a < b);//优先级排序 ()最高, > , < , || , =最低,所以b>a为真n值为1,a<b也为真m值为1,两个真值取逻辑或结果为真,所以k为1,但是会存在短路现象,就是说如果逻辑或前面的表达式为真就不会执行后面的表达式,所以m=a<b并未执行,所以m的值仍为0。
printf("%d,%d\n", k, m);//所以输出1,0
return 0;
}
附上一张优先级表格