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。

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

相关推荐
weixin_4866811412 分钟前
C++系列-STL中find相关的算法
java·c++·算法
我是真爱学JAVA38 分钟前
第四章 类和对象 课后训练(1)
java·开发语言·算法
Qiuner1 小时前
【机器学习】分类与回归——掌握两大核心算法的区别与应用
算法·机器学习·分类
浪里个浪的10241 小时前
C语言基础:条件语句与分支控制实例解析
c语言·开发语言
oufoc1 小时前
第J1周:ResNet-50算法实战与解析
神经网络·算法·tensorflow
想拿大厂offer2 小时前
【数据结构】第八节:链式二叉树
c语言·数据结构
Youkiup2 小时前
【重构数组,形成排列的最大长度】
算法
星夜孤帆2 小时前
LeetCode之图的广度优先搜索
算法·宽度优先
忍界英雄2 小时前
LeetCode: 673.最长子序列的数量 动态规划 时间复杂度O(n*n)
算法·leetcode·动态规划
Renascence.4092 小时前
力扣--649.Dota2参议院
java·数据结构·算法·leetcode