赋值运算中的自动类型转换
注意:
赋值后,原来左边的值将被右边的表达式替换;
如果右边表达式的值的类型与左边的表达式类型不一样,以左边的变量的类型为准,将表达式值的类型转化为左边的变量的类型。
int -float 丢失小数部分(非四舍五入)
float-double 数值溢出或者损失精度(位数超过七位时)
float-long 整数的位数超过七位时,损失精度
eg: int a=12,b=8;
float x,y;
b=x=y=a+b; 表达式的值?x的值?y的值?
结果:a+b=20,y=20.0,x=20.0,b=20
eg:double x=1.5,y=2,z=2;
z-=x+y;\\z=z-(x+y)
结果:2.0-(1.5+2.0)=-1.5 double型
eg:求出i的值
int i=3,k=5;
float x=2.5,y=5.0;
i-=k*=x+y;
结果: i=-34
计算结果: i=i-(k=k*(x+y))
=i-(k=k*7.5)
=i-(k=5*7.5)
=i-37=-34
eg:
a=12;
a+=a-=a*a;
结果:a=-264
计算结果:a=a+(a=a-(a*a))
eg:
int a=2;
a%=4-1;
a+=a*=a-=a*=3;
结果:a=0
计算结果:a=a+(a=a*(a=a-(a=a*3)))