1)这个是要求什么表达式的值呢?后面的除2(/2)完全没有作用啊,执行后x=2,因为x是整型;若是x=((float)(y)+0.5)/2,执行后x=1;
2)逗号(,)运算符求职顺序为自左至右,所以,执行--x,y++后x=0,y=3,z=3,然后求得最右边x+y+z=6并将此结果赋给z;
3)等号(=)运算符结合方向为自右至左,所以,先有y=z=3,然后x=y=3;
4)z=1是赋值运毁裂拆算,赋值成功,返回为1,所以x*=y-1;x=1,y=2,z=1;
5)y++引用y=2后y=3,--z是z自减为2后引用,所以,x=4,y=3,z=2;
6)z/=2后z=1,然后源模化为x=x%(z=1),与4)纤枣类似,x=x%1=0,y=2,z=1。
解释没必要,知识点(春轿自己去看):
1、表达式求值顺序
2、类型转换
3、前自增与后自增
4、复合操作符
提醒:表达式总会返回一个值
(希望以C/C++标准扒拦肆为准,而衡老不是某个编译器)
1)首先和语言有关:假设你是C或C++;
2)然后考察的是类型转换:显然二楼对第一个答案1.250000是不对的;
3)之后是考察编译器:这个比较麻烦第二指裂灶题就是依赖编译器,优化编译器,那么可能3个值同时先赋值后计算,即(--1,2++,1+2+3),不优化就会默认从左往右。二楼的6可能有很多种解释。
4)考唯扮察运算符优先级:这个是基础,不源渗解释
1)宽物大(x=(float)(y)+0.5)/2 1
2) z=(- -x,y++,x+y+z) 6 括慎竖号运算,值为最后一个代数式的值 --x ,x=0,y++ ,y=3 ,x+y+z=6
3) x=y=z 3 赋值运算,从右向蚂弯左,x=3,y=3,z=3
4) x*=y-(z=1) 2 z=1 假为0, x*=2-0 x=2
5) x=(y++)+(--z) 4 x=2+2=4
6) x%=(z/=2) 0 z/=2 z=1,x=x%1=0
1. 1.250000
2. 6
3. 3
4 .2
5. 4
6. 0