整型提升、算术转换、强制类型转换

整型提升问题

表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器的字节长度,一般就是int的字节长度,同时也是CPU的通用寄存器的长度。

因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。

通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。

所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算

需要进行类型转换的是比int存储空间小的char和short(char转换为ascii码后也是整型,所以char严格意义上也算整型)

表达式中的字符char和短整型short操作数在使用之前被转换为普通整型int,这种转换称为整型提升。

char类型或short类型运算时,首先会将数据提升到整型int类型,也就是32位二进制序列,整型提升时高位按照符号位进行填充,之后进行数据的运算,得到的结果是int类型的,如果存放这个数据的变量类型又比int范围小,则会进行截断(多出的位数会将高位丢弃)

整型提升是按照变量的数据类型的符号位来提升的,如果是无符号数,则高位直接补0

算术转换

如果某个操作符的各个操作数属于不同的类型,那么除非其中一个操作数的转换为另一个操作数的类型,否则操作就无法进行。这种层次体系称为寻常算术转换。

算术转换仅限于数据类型大小  大于等于int的类型使用,比它小的会进行整型提升

如果一个类型和它的无符号类型进行比较或运算等,把那个类型转换为无符号类型,例如int和unsigned int进行比较运算等,会把int转换为unsigned int

简而言之就是如果进行运算或赋值等操作的两个操作数类型不同,则会将较小类型的操作数的类型转换为较大类型操作数的类型!!(例如short b = 10;int a = b,此时b会被转换为int类型 )

算术转换的原则

转换按数据长度增加的方向进行,以保证精度不降低

例如int型和longlong型运算时,先把int型转换为longlong型后再进行运算

强制类型转换

强制类型转换的写法:(数据类型)(表达式或数据等)

其功能是把表达式的运算结果强制转换成我们给予的数据类型

强制类型转换只是临时转换,并不会改变原有的表达式类型

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值