C语言菜鸟题

来源:百度知道 编辑:UC知道 时间:2024/06/13 22:31:11
int a=0,b=4,k;
k=a+1>0&&((!b-->=0));

printf("%d,%d,%d",a,b,k);

结果K=1;

a+1>0 为真,!b-->=0为假
中间价格&&不是应该变成假了吗?咋k还等于1呢》?

!b-->=0
!的运算级别高于其他,先做!b

大于等于不是那样子写的
!(b--==0||b-->0)

这是关于优先级的问题,
k=a+1>0&&((!b-->=0)); 等效于
k=(a+((1>0)&&((!b-->=0))));

即并不是a+1后再与0比,
而是1>0比完后再&&,
得到1后再+a,
得到k=0+1

关于优先级的问题一般在C语言教材最后几页有列出,你可以仔细看一下

QQ739227481