熟悉操作符, 为了更好的运算,求解。
那么在具体的运算,求值过程中,又会有哪些问题?
1.表达式求值
(1)表达式求值的顺序是一部分由操作符的优先级和结合性决定的。
优先级:先算哪一个。 如:a + b * c ; 则先算b*c 再+a
结合性:左结合性:从左往右执行。右结合性:从右往左执行。
(2)同样,有些表达式的操作数在求值的过程中可能需要转换为其他类型
2.隐式类型转换(整型提升)
(1)为什么?
(i)C的整型算数运算总是以缺省整型类型的精度来进行的。
为了获得这个精度,字符型和短整型操作数(即小于int的4字节的操作数)会在使用之前转换为普通整型(int类型),这种转换称为整型提升。
(ii)表达式的整型运算在CPU的相应运算器内执行,CPU内整型运算器(ALU)的操作数的字节长度是int的字节长度,同时也是CPU的通用寄存器的长度。
所以,整型运算的被处理的形式就是int类型,所以我们需要对小于4个字节的进行整型提升,转换成int 或unsigned int
(2)如何进行整型提升?
规则:
注意,对于负数的整型提升,二进制位只是补码,如需要打印,要算出反码,原码
思路介绍:
char a,b,c;
.....
a = b + c;
第一步: b 和 c 需要先转换成普通整型(int整型),然后在加法运算
第二布:将b+c 的结果(即是32个二进制位) , 进行截断 (即只取后面8个二进制位), 然后放到a中
举例介绍:
题目实操:
任何变量都具有的2个属性: 值属性和类型属性
如: int a = 5;
int b = 3;
int c = a + b ;
c的值属性: 8
c的类型熟悉: int类型
sizeof只是针对变量的类型属性
3.隐式类型转换(算数转换)
(1)什么是算数转换
(2)转换规则:
(i)若类型内存不同:类型内存小的要转换成类型内存大的。
(ii)若内存类型相等:精度小的转换成精度大的。