【C语言】整形提升

整形提升原理及验证

发生场景:

隐式类型转换:C语言中,算术运算时至少会以缺省类型的精度进行。为了达到这个精度,表达式中的字符和短整形操作数在计算之前会被转换为普通整形,这种转换就是整形提升。
为什要进行整形提升?
表达式的整形运算在CPU中的相应运算器件内执行,而CPU的整形运算器(ALU)的操作字节长度一般为int的字节长度,这也是CPU通用寄存器的长度。
通用CPU难以实现两个小于int长度的n个字节直接相加运算,所以,表达式中各种长度可能小于int长度的整形值,都要先转换为int或者unsigned int ,再送入CPU进行运算。
例:

char a,b,c;
...
a = b+c;

其中b和c在进行运算时,会被提升为普通整形,加载到CPU中执行加法运算,运算完成后,运算结果会被截断,存储到a中。

如何进行整形提升

整形提升,依照变量数据类型的符号位来进行提升
1.无符号整形提升,高位补0

2.有符号的整形提升,高位补其符号位

  1. 负数的整形提升
    char a = -1;
    a为负数,其补码为1111 1111,占8个比特位
    (vs 2013 默认为有符号的)char为有符号的char
    整形提升时高位补充符号位 1
    提升结果为:1111 1111 1111 1111 1111 1111 1111 1111
  2. 正数的整形提升
    char b = 1;
    b为正数,其补码为0000 0001,占8个比特位
    char为有符号char
    整形提升高位补充符号位 0
    提升结果为:0000 0000 0000 0000 0000 0000 0000 0001

例:以下分别对无符号和有符号整形的整形提升现象进行验证,使用int和char类型变量来接收计算结果。
在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值