整型提升的示例讲解

当我们进行表达式的计算时,表达式求值之前需要进行类型转换,表达式中的值转换到适当的类型,才开始计算。

就像下面一个示例

int main()
{
	char a = 5;
	char b = 127;
	char c = a + b;
	printf("%d ", c);
	return 0;
}

在这串代码中,a、b、c的类型都是字符,字符类型的是无法相加减的,那么这里程序就自动将表达式进行类型转换换成整型进行加减,那么得到的结果则是

 那么为什么是-124,本篇博客来讲解整型提升的过程。

整型提升

我们知道,char类型在内存中占1个字节,1个字节也就是8个比特,那么我们可以用画图的形式来看

可以看到,当我们定义a和b的时候分别在内存中开辟了各自的空间,每一小格代表了一个比特,八个小格则是一个字节,而a和b都是字符类型的,所以占有一个字节。

而在定义中,我们把a定义成5,b定义成127,分别转换成二进制的表达形式。

可以用计算机来算

 再用0补全高位数之后,得到的a和b则是

每个定义的数,系统会自动将定义的数放在一个整型类型,也就是4个字节当中。然后再根据所定义的类型进行截断

就像上图所示,由于char类型占一个字节,所以截断了8个比特位

继续下去,当我们要计算c的时候,就会发生整型提升了,我们得先清楚提升的规则。

1.有符号的整数提升是按照变量的数据类型的符号位来提升的

2.无符号整数提高位补0

由于char类型是有符号整型吗,所以,a和b整型提升后则是

 再将提升后的a、b相加,得到的整型二进制是

 由于c的类型是char类型,所以我们要截断后八个字节

得到

 再对次进行提升,得到

 

 得到了c的补码。由于printf中的函数打印的是原码,所以我们要进行补码换原码的操作

 原码计算后得到的十进制数是124,由于符号位是1,所以打印出的应该是-124.

我们看看结果是不是

 结果和我们想的一样,这就是整型提升

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值