作业帮 > 综合 > 作业

主要不明白a的值,括号里我知道是赋值语句,但是y的值怎么算到5的?请具体说明运算顺序!

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/11/06 07:14:40
主要不明白a的值,括号里我知道是赋值语句,但是y的值怎么算到5的?请具体说明运算顺序!
#include
int main()
{ int a,b,c;
int x=5,y=10;
a=(--y=x++)?-y:++x;
printf("%d,%d\n",x,y);
b=y++;
c=x;
printf("%d,%d,%d",a,b,c);
}
#include
int main()
{ int a,b,c;
int x=5,y=10;
a=(--y=x++)?-y:++x;//--y得y=9,然后y=x++,即y=5,x=6,接着5?成立a=-y=-5
printf("%d,%d\n",x,y);//最后x=6(只计算x++,++x未算) ,y=5(--y,y=x++即y=5)
b=y++;//b=y=5,y=y+1=6
c=x;//c=x=6
printf("%d,%d,%d",a,b,c);//a=-5,b=5,c=6
}
再问: 可是自增和自减结合方向不是自右至左的吗?为什么先是运算--y呢?而不是从右边x++开始?
再答: 结合性和运算方向有区别,如int i=1;则f(++i,i)等价于f(2,2)或f(2,1)f为函数,有些系统从左往右计算即++i=2,i=2,f(2,2)有些系统从右往左计算即i=1,++i=2,f(2,1)
--y=x++--,++同级运算,=要低,先算--,++后算=至于左还是右结果一样比如2*3+4*5到底先算2*3还是4*5与系统有关