表达式求值和隐式类型转换(整型提升和算数转换)

文章详细介绍了C语言中表达式求值时涉及的问题,包括操作符的优先级和结合性如何决定计算顺序,以及隐式类型转换,特别是整型提升的过程和原因。整型提升是因为CPU的整型运算器以int类型进行运算,因此较小的类型在运算前会被转换为int。同时,文章提到了算数转换的规则,即类型小的转换为类型大的,以确保精度。
摘要由CSDN通过智能技术生成

熟悉操作符, 为了更好的运算,求解。

那么在具体的运算,求值过程中,又会有哪些问题?

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)若内存类型相等:精度小的转换成精度大的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值