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。

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

相关推荐
眠りたいです2 小时前
现代C++:C++14中的新语言特性和库特性
c语言·开发语言·c++
Black蜡笔小新2 小时前
自动化AI算法训练服务器DLTM助力医学影像分析进入AI智能分析新时代
人工智能·算法·自动化
手写码匠3 小时前
深入解析大模型架构之争:全能通用模型 vs 领域专精模型
人工智能·深度学习·算法·aigc
浅念-3 小时前
LeetCode 回溯算法题——综合练习
数据结构·c++·算法·leetcode·职场和发展·深度优先·dfs
列星随旋4 小时前
线段树和树状数组的学习
学习·算法
ytttr8735 小时前
OPC UA 协议栈 C 语言实现
c语言·开发语言·mfc
song5015 小时前
Ascend C 算子开发:从入门到上手
c语言·开发语言·图像处理·人工智能·分布式·flutter·交互
小a杰.6 小时前
Ascend C编程语言进阶:高性能算子开发技巧
android·c语言·开发语言
全糖可乐气泡水6 小时前
Codex适配国产信创环境安装部署与技术适配全解析
开发语言·git·python·算法·百度