news 2026/6/25 16:41:07

C语言 — 整型提升和算数转换

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
C语言 — 整型提升和算数转换

一.什么是整形提升?

CPU内整形运算器的操作数的字节长度,一般是 int 类型的长度 。C的整数运算总是以整型类型的进度来进行的。为了获取这个精度,表达式中字符短整型操作数在使用之前被转换为普通整形,这种转换称为整形提升

二.怎么进行整形提升?

规则:整形提升是按照变量的数据类型的符号位来提升

负数的整形提升

char c1 = -1;

变量c1的二进制补码中,只有8个比特位,即1111 1111

怎么得到这个结果的?

-1 是整数,即 4个字节 32个比特位.

-1的原码:1000 0000 0000 0000 0000 0000 0000 0001

-1的反码:1111 1111 1111 1111 1111 1111 1111 1110

-1的补码:1111 1111 1111 1111 1111 1111 1111 1111

因为c1只有8个比特位,放不下一个整形(32个比特位),此时就会发生截断只把最后面的8个比特位放进c1里。

c1的整形提升:c1是有符号char, 整形提升的时候 ,最高位补充符号位 1 。

即 1111 1111 1111 1111 1111 1111 1111 1111

正数的整形提升

char c2 = 1;

变量c2的二进制补码中,只有8个比特位,即0000 0001。

怎么得到这个结果的?

1 是整数,即 4个字节 32个比特位。因为是正数原码反码补码都是一样的。

1 的补码:0000 0000 0000 0000 0000 0000 0000 0001

因为c2只有8个比特位,放不下一个整形(32个比特位),此时就会发生截断只把最后面的8个比特位放进c1里。

c1的整形提升:c1是有符号char, 整形提升的时候 ,最高位补充符号位 0 。

即 0000 0000 0000 0000 0000 0000 0000 0001

无符号数

无符号数整型提升,最高位补0。

三.整形提升的示例

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

这个代码运行的结果是什么呢?

下面来分析:

5 是正数,原反补都一样。

5 的补码:0000 0000 0000 0000 0000 0000 0000 0101

然后截断最后8个比特位,a里存放 0000 0101。

126 的补码:0000 0000 0000 0000 0000 0000 0111 1110

截断最后8个比特位,b里存放 0111 1110。

在这个表达式中 c = a + b ,a 和 b 是达不到一个整形的大小,整形提升。

0000 0000 0000 0000 0000 0000 0000 0101

0000 0000 0000 0000 0000 0000 0111 1110

整型提升后执行运算。

结果 :0000 0000 0000 0000 0000 0000 1000 0011

运算完,截断,存放1000 0011 。

最后打印的是%d (打印整形)这个时候,又整形提升这次最高位是 1

整型提升的结果:1111 1111 1111 1111 1111 1111 1000 0011

还没完,这次得到的整形提升的结果是补码。

-1 得到反码1111 1111 1111 1111 1111 1111 1000 0010

取反得到原码1000 0000 0000 0000 0000 0000 0111 1101

如果把这个补码放到程序员计算器里,就会最终得到这个数字:-125

这里还有一个例子

int main() { char c1 = 1; short c2 = 1; printf("%u\n", sizeof(c1)); printf("%u\n", sizeof(c2)); printf("%u\n", sizeof(+c1)); printf("%u\n", sizeof(+c2)); printf("%u\n", sizeof(-c1)); printf("%u\n", sizeof(-c2)); }

这种 +c1(c2)和 -c1(c2) 也是表达式,计算大小的时候也会发生整形提升。

四.什么是算数转换?

如果某个操作符的各个操作数,属于不同类型,除非一个操作数转换位另一个操作数的类型,否则操作就无法进行。

和整形提升不的是,整形提升都是< int 的数据类型。而>= int 是算术转换的数据类型

寻常算术转换的层次体系

long double double float unsigned long int long int unsigned int int

例如:

操作数是float 类型 和 double 类型的时候,float 就会转换为double 进行运算

如果某个操作数的类型在上面的排行中,次位较低,要转换为另一个操作数的类型后进行运算。但是算术转换要合理,不然会有丢失进度的风险。

例如:

float f = 3.14; int num = f; //会有进度的丢失

看到这里不知道你对整形提升和算数转换是否增加一些看法呢,最后也是,byebye

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 16:40:14

AI时代岗位价值再锚定:从防替代到重构职责的操作手册

1. 这不是科幻片预告&#xff0c;而是你下周例会可能要讨论的现实议题“Is AI Going to Take Our Jobs?”——这个标题我第一次在客户会议室白板上看到时&#xff0c;是在帮一家中型广告公司做数字化转型诊断。当时市场总监把这句话写在最上面&#xff0c;底下画了三条线&…

作者头像 李华
网站建设 2026/6/25 16:39:46

Topit:让你的Mac窗口永远在最前方,工作效率提升300%的秘密武器

Topit&#xff1a;让你的Mac窗口永远在最前方&#xff0c;工作效率提升300%的秘密武器 【免费下载链接】Topit Pin any window to the top of your screen / 在Mac上将你的任何窗口强制置顶 项目地址: https://gitcode.com/gh_mirrors/to/Topit 你是否曾经在写代码时&am…

作者头像 李华
网站建设 2026/6/25 16:39:13

锚定双碳热点,绿色智慧园区开启低碳运营新范式

在国家“双碳”战略持续深化、绿色低碳发展全面落地的当下&#xff0c;产业园区作为城市能源消耗、产业集聚的核心载体&#xff0c;其绿色化、低碳化转型成为行业主流热点。以往重建设、轻运维、高能耗的传统园区模式已不符合新时代发展要求&#xff0c;兼具数字化、智能化、绿…

作者头像 李华
网站建设 2026/6/25 16:36:23

ReAct Agent 完整实现:从零构建能查天气、算数学的智能助手

背景 2022 年 Google 在论文 ReAct: Synergizing Reasoning and Acting in Language Models 中提出了一种全新的 Agent 范式&#xff1a;让 LLM 在推理&#xff08;Reasoning&#xff09;和行动&#xff08;Acting&#xff09;之间循环迭代&#xff0c;而不是一步到位生成答案…

作者头像 李华
网站建设 2026/6/25 16:30:00

AlibabaProtect 服务彻底卸载指南

直接在任务管理器里面是关不掉的&#xff0c;点击结束进程没任何反应。 开始菜单搜索 资源监视器&#xff0c;选择CPU选项卡&#xff0c;关联的句柄里面搜索alibaba&#xff0c;把里面的程序右键&#xff0c;结束进程。 预防再生 如果电脑上还在使用阿里系软件&#xff08;旺旺…

作者头像 李华
网站建设 2026/6/25 16:26:39

Midjourney V7实操指南:Personalization Profile与Draft Mode深度解析

1. 这不是又一个“AI画图工具升级公告”&#xff0c;而是一份我亲手跑通8个真实工作流的V7实操手记Midjourney V7刚上线那会儿&#xff0c;我朋友圈里一半人在晒“哇这质感太绝了”&#xff0c;另一半在问“到底比V6强在哪&#xff1f;值不值得换&#xff1f;”——说实话&…

作者头像 李华