隐式类型转换和整型提升

c整型中的运算总是至少以缺省整型类型的精度来进行的,所以当字符型或者短整型在进行运算时为了获得这个精度,先要提升成普通整型,再运算。

例:

  char a=127;

  char b=1;

  char ret=a+b;


在进行运算时,先进行“整型提升”(提升成整形):

char类型的127 是:0111 1111

进行整型提升后是:00000000 00000000 00000000 01111111


char类型的1 是:0000 0001

整型提升后是:00000000 00000000 00000000 00000001


提升后在进行运算:

              00000000 00000000 00000000 01111111

              00000000 00000000 00000000 00000001

         结果 00000000 00000000 00000000 10000000

然后再发生截断:ret=1000 0000

在这个例子中计算的结果与算术结果没有区别,但是入股在下面这个例子中区别就大了:

ret=((a<<2)+b)>>2,

如果不进行整型提升,则当移位是会将高位丢失。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值