【C语言】整型提升

前言
🎈大家好,我是何小侠🎈
🌀大家可以叫我**小何或者小侠🌀**
🔴我是一名普通的博客写作者🔴
💐希望能通过写博客加深自己对于学习内容的理解💐
🌸也能帮助更多人理解和学习🌸
🍃我的主页: 何小侠的主页🍃

在这里插入图片描述


    这篇博客我们一起来学习C语言中的整型提升,这对我们理解内存很有好处。
    🍊
    在这里插入图片描述

    整型提升🍊

    在C语言中经常会遇到类型转换,比如说
    在这里插入图片描述
    这张图中并没有包含,short 和 char 类型,是因为它们都会在需要隐式类型转换转换为 int

    那为什么需要整型提升呢?
    也就是整型提升到底好在哪里?

    在CPU中会有相应的运算器执行整型的运算过程,而这个运算器(ALU)的操作数的字节长度一般就是int 的字节长度,同时也是CPU通用寄存器的长度。
    因此小于int字节数的两个类型,char short 需要在先转换为int再执行运算。
    通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。
    所以,表达式中各种长度可能小于int长度的整型值,
    都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。

    例子🍊

    //例1
    char a,b,c;
    ...
    a = b + c;
    

    如果两个char 类型相加就会先整型提升,再相加,再加法完之后还会发生截断再存储在a中,因为a中只能存储8个比特位。当然对算术运算都是符合的。
    再看

    到底如何整型提升🍊

    整型提升是按照变量的数据类型的符号位来提升的
    无符号整形提升,高位补0,有符号整型提升,高位补充符号位
    这就是我们整型提升最重要的一点
    来看看一个例子

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

    这里就发生了int = char + int ,这个时候就需要发生整型提升。
    但是我们要先补充一个知识
    在这里插入图片描述

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

    下面就是详细的讲解
    在这里插入图片描述
    一定要记住什么时候要截断,什么时候要提升,提升要按照符号位提升。
    我们再来看看一个例子

    int main()
    {
    	char c1 = 3;
    	char c2 = 127;
    	char c3 = c1 + c2;
    	printf("%d\n", c3);
    	return 0;
    }
    

    这里是char = char + char。

    在这里插入图片描述
    最后还需要按照%d形式打印
    在这里插入图片描述
    再来一个例子

    int main()
    {
    	char a = 0xb6;
    	short b = 0xb600;
    	int c = 0xb6000000;
    	if (a == 0xb6)
    		printf("a");
    	if (b == 0xb600)
    		printf("b");
    	if (c == 0xb6000000)
    		printf("c");
    	return 0;
    }
    

    我们还是慢慢来,逐渐习惯分析,当分析与结果一致是很快乐的。
    在这里插入图片描述
    最后一个例子:

    int main()
    {
     char c = 1;
     printf("%u\n", sizeof(c));
     printf("%u\n", sizeof(+c));
     printf("%u\n", sizeof(-c));
     return 0;
    }
    

    与之前的几个例子一样思路即:
    第一个printf不会发生整型提升,但是在后两个中,由于±符号的添加,需要表达式运算范畴,
    所以sizeof(+c) 就是4个字节 ,sizeof(-c)也是4个字节。

    总结🍊

    这篇博客我们系统的介绍了C语言中整型提升的知识点,我觉得这对我们对于内存的理解是非常好的,无论是分析还是调试都显的更清晰了。

    最后如果这篇博客有帮助到你,欢迎点赞关注加收藏

    在这里插入图片描述在这里插入图片描述
    如果本文有任何错误或者有疑点欢迎在评论区评论
    在这里插入图片描述

    在这里插入图片描述

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包

    打赏作者

    He XIAO xia

    你的鼓励将是我创作的最大动力

    ¥1 ¥2 ¥4 ¥6 ¥10 ¥20
    扫码支付:¥1
    获取中
    扫码支付

    您的余额不足,请更换扫码支付或充值

    打赏作者

    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

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

    余额充值