一、表达式求值
表达式求值顺序一部分是由操作符的优先级和结合性决定。同样,有些表达式的操作数在求值的过程中可能需要转化为其他类型
1.隐式类型转换
表达式中的字符和短整型操作数在使用之前被转换为普通整型——整型提升。
char a=3;
//使用前转换为普通整型,从8位变成32位00000000000000000000000000000011;正数补码原码相同
//截断最后八位放到a里00000011
char b=127;
//00000000000000000000000001111111
//01111111
char c=a+b;//-126
//符号位为0,整型提升前面补0
//00000000000000000000000000000011
//00000000000000000000000001111111
//00000000000000000000000010000010
//10000010 c
//整型提升11111111111111111111111110000010 补码
11111111111111111111111110000001 反码
00000000000000000000000001111110 原码 -126
a,b的值被提升为普通整型,再执行加法运算,完成后被截断,存储在c中。
字符只要参与运算,就会发生整型提升。
2.算术转换
1)非赋值运算:不同类型操作数在一起运算,一个操作数要转换为另一个操作数的类型
排名低的向高的转换
2)赋值运算 变量=表达式 表达式类型自动转换成变量类型(注意表达式值是否超过变量所属类型的取值范围)
将取值范围小的转换为大的是安全的,反之不安全,可能会字节丢失。
补充:如何实现小数的四舍五入? (int)(a+0.5)
二、操作符的属性
1.操作符的优先级
2.操作符的结合性
3.是否控制求值顺序
标签:操作数,运算,操作符,整型,求值,表达式 From: https://blog.51cto.com/u_15901728/5928317