C语言小tip之整型提升

今天让我们来学习一下C语言中的一个小知识点-----整型提升

什么叫整型提升呢?

C语言中整型算术运算总是至少以缺省(默认)整型类型的精度来进行的。​为了获得这个精度,表达式中的字符和短整型操作数在使用之前被转换为普通整型,这种转换称为整型提升。​

整型提升的意义

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

因此,即使两个char类型的相加,在CPU执行时实际上也要先转换为CPU内整型操作数的标准长度。通用CPU(general-purpose CPU)是难以直接实现两个8比特字节直接相加运算(虽然机器指令中可能有这种字节相加指令)。所以,表达式中各种长度可能小于int长度的整型值,都必须先转换为int或unsigned int,然后才能送入CPU去执行运算。​

让我们来看一段代码:

cpp 复制代码
#include<stdio.h>
int main ()
{
    char a = 5;
    char b =125;
    char c = a + b;
    printf("%d",c);
}

在VS中鼠标点在5上会显示int类型,所以a先要转换成int类型32个byte位即00000000000000000000000000000101(原反补相同),因为a的类型是char只占1个字节--8个byte(要发生截断)位即00000101同理b为01111101 。

在进行a + b的运算时,要进行整型提升因为该类型为有符号的char在进行整型提升的时候要按照符号位进行提升a由原来的00000101要变为00000000000000000000000000000101,b由原来的

01111101要变为00000000000000000000000001111101在进行相加,结果为00000000000000000

0000000010000010发生截断为10000010在进行打印的时候%d打印由符号的整数,同时也要进行整型提升,这时要注意要以符号位1来进行提升11111111111111111111111110000010转换为原码(取反加一)后为10000000 00000000 00000000 01111110,翻译后为-126。

今天介绍就到这里啦,拜拜。

相关推荐
土司大王5 小时前
LeetCode hot100——对称二叉树
算法·leetcode·职场和发展
sali-tec5 小时前
C# 基于OpenCv的视觉工作流-章106-差值追踪
图像处理·人工智能·opencv·算法·计算机视觉
Navigator_Z5 小时前
LeetCode //C - 1208. Get Equal Substrings Within Budget
c语言·算法·leetcode
手写码匠5 小时前
Dify 多 Agent 工具权限与安全沙箱实战:让智能体“有能力,但不越权“
人工智能·深度学习·算法·aigc
黎阳之光6 小时前
打破堆场感知黑盒:黎阳之光视频孪生,构建港口码头网格化透明管控新体系
大数据·人工智能·算法·安全·数字孪生
xx~t6 小时前
嵌入式——进程与线程1
linux·c语言·学习·嵌入式·进程与线程
大模型码小白6 小时前
AI 对话流性能调优:万级消息的虚拟滚动落地
java·大数据·前端·javascript·人工智能·算法·机器学习
老当益壮梁奶奶6 小时前
Linux软件编程学习笔记(七):线程分离与线程间通信详解
linux·c语言·c++·笔记·学习
sel_97 小时前
【多轮对话论文导读(三)】多轮对话与Agent论文阅读笔记:用户模拟、轨迹生成与长期记忆
论文阅读·人工智能·笔记·深度学习·算法·机器学习
Asize7 小时前
438. 找到字符串中所有字母异位词
算法