首页/新闻资讯/正文详情

C语言底层探秘:整数与浮点数在内存里到底是怎么藏起来的?

发布时间:2026/11/8 7:16:36 来源:云帆数科 栏目:资讯中心
C语言底层探秘:整数与浮点数在内存里到底是怎么藏起来的?
引言很多人写C语言天天写int a; float b;但很少思考一个问题我们写的数字在计算机内存这一大片字节格子里到底是怎么存放的 为什么同样一串二进制当int读是9当float读就变成0.000000为什么char a-1打印%u会出来255大小端又是什么鬼今天咱们抛开晦涩课本把内存存储一次性讲明白。一、整数在内存存的不是原码是补码我们都知道计算机只认识0和1。 对于有符号整数有三套二进制表示原码、反码、补码。原码直接把数字转成二进制最高位当做符号位0代表正数1代表负数。反码正数反码等于原码负数符号位不动其余全部按位取反。补码正数补码原码负数 反码 1。重点内存里面整数一律存放补码不是原码为啥非要搞补码直接存原码不好吗CPU只有加法器没有减法器。减法可以转换成补码的加法运算。计算5‑3等价于5 (-3)的补码相加。解决原码里面存在0和‑0两个编码的问题补码体系中0只有唯一一份编码还多挤出来一个负数可用。举个8位signed char例子-1原码1000 0001-1反码1111 1110-1补码1111 1111所以内存中存的就是11111111。 这就解释了经典笔试题char a -1; unsigned char c -1; printf(%d, c); //输出255内存字节是0xff当成无符号解读就是255。8位有符号char范围‑128 ~ 127注意‑128没有对应的原码和反码是补码独有的二进制10000000。无符号数溢出环形绕圈现象无符号数字到最大值再加1不会报错直接绕回0。unsigned char范围0‑2552551直接变成0。 之前那道高频面试题char a[1000]; int i; for(i 0; i 1000; i) { a[i] -1 - i; } printf(%d, strlen(a));strlen统计到\0字节0停止。‑1‑i赋值给char截断保留低8位。当i255‑1‑255 ‑256低8位全部为0也就是\0。前面一共255个有效字符输出255。小技巧8位数据只要是256的整数倍截断低8位一定等于0。二、大小端同一个数字两种摆放方式问题来了一个int占4字节4个字节怎么排列放在内存地址上这里就诞生了大端、小端模式。举个例子int a 0x11223344;把这个int拆开成4个字节 高字节0x110x22低字节0x330x44内存地址是从小到大增长的就像一排从左向右编号的盒子。小端模式我们电脑VS、X86/X64都是小端低字节放到低地址左边盒子高字节放到高地址右边盒子内存排布地址由低→高44 33 22 11VS内存窗口从左往右就是地址由低到高看到的就是这个顺序。大端模式单片机KEIL C51常用高字节放到低地址低字节放到高地址内存排布地址由低→高11 22 33 44阅读更符合人类阅读习惯。注意大小端只是字节的摆放顺序不会改变数值只是内存存储布局不同。面试手写判断本机是大端还是小端思路把int1拿第一个内存字节看值。 int i1小端下最低地址存的字节是01大端最低地址存00。写法1指针强制转换版int check_sys() { int i 1; return *(char *)i; }返回1代表小端返回0代表大端。写法2联合体版本利用联合体成员共享同一起始内存int check_sys() { union{ int i; char c; }un; un.i 1; return un.c; }联合体所有成员共用同一块内存起始位置un.c直接取第一个字节不需要强制转换。三、浮点数float/double存储规则完全不一样整数用补码存但是浮点数完全不走补码这套体系遵循国际标准IEEE754。公式 $$V(-1)^S × M × 2^E$$拆解三部分S符号位1bit0正数1负数E指数位用来存放2的多少次方M有效数字/尾数类型S符号位E指数位M有效位float(32位单精度)1 bit8 bit23 bitdouble(64位双精度)1 bit1 bit11 bit举例子5.0二进制写成101.0科学计数法$1.01 × 2^2$ S0M1.01E2。两个关键规则M的隐藏1M规定范围 $1 ≤ M 2$一定是1.xxxx。 标准直接把整数部分的1舍弃不存内存只保存小数点后面xxxx部分。读取的时候自动把1加回来凭空多出来1位精度。E指数要加偏移量中间数E是无符号数不能存负数。floatE真实值 127存入内存doubleE真实值 1023存入内存比如E真实等于2float存入内存写2127 129。E的三种读取情况E不全0不全1正常情况真实指数 内存E − 偏移量(127/1023)M补上隐藏的1。E全部为0隐藏的1不再加上M变成0.xxxx。用来表示接近0的极小数字±0。E全部为1如果M全0代表正负无穷M不为0代表NaN无效数值。经典迷惑代码看完再也不懵int n 9; float *pFloat (float *)n; printf(n的值为:%d\n, n); printf(*pFloat的值为:%f\n, *pFloat); *pFloat 9.0; printf(n的值为:%d\n, n); printf(*pFloat的值为:%f\n, *pFloat);输出n的值为:9 *pFloat的值为:0.000000 n的值为:1091567616 *pFloat的值为:9.000000n9内存二进制00000000 00000000 00000000 00001001。把这串二进制强行按float规则解读。 S0E全0进入E全0特殊场景算出来是极小接近0的数字打印就是0.000000。往这个内存地址写入浮点数9.0按照IEEE754编码写入一串bit。再用int去读取这串bit就得到十进制数字1091567616。⚠️重点提醒int和float虽然都是4字节编码体系完全两套同样二进制解读方式不同数值天差地别。同时注意部分十进制小数例如1.2二进制无法精确表达float/double存储会存在微小精度误差。本篇核心总结整数内存存补码CPU靠补码把减法变成加法运算有符号溢出属于未定义行为无符号溢出环形回绕。大小端是字节排列顺序小端低字节放低地址电脑X86都是小端两种手写检测方式指针强转、联合体。浮点数不使用补码遵循IEEE754S符号位E带偏移的指数M有隐藏最高位1分E全0、全1、普通三种场景。同样的内存二进制序列用int读、用float读得到完全不同结果因为两套解码规则。很多C语言坑根源就是不懂内存存储。面试经常考的溢出题、大小端、int和float强制类型转换迷惑题底层全部来源于这些知识点。如果你喜欢本文欢迎点赞收藏后面继续更新C指针、结构体内存对齐的底层内容。有看不懂的地方欢迎评论区留言讨论886~。

相关推荐

UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解
UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解

UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解 嵌入式 裸机&RTOS开发杂谈系列 第六章 UART 与 USART 中的波特率、停止位、数据位、起始位、CK 作用详解 UART 和 USART 都用于串行通信,但它们对齐数据帧的方式不同:UART 只支持异步… · 2026/11/3 13:48:14

bandgap
bandgap

场景分类 bandgap(带隙基准电压源)。按最常见的分类口径,主要有以下几类: 按补偿阶数分 一阶带隙基准:经典结构,输出 ≈ 1.2V,用 VBE 的负温度系数 ΔVBE(PTAT)的正温度… · 2026/11/2 23:46:45

agno v3.1.11 发布:Harness Agent 接入团队与工作流、会话高级搜索、Company 任务与例程全面升级
agno v3.1.11 发布:Harness Agent 接入团队与工作流、会话高级搜索、Company 任务与例程全面升级

Agno v3.1.11 已于 2026 年 10 月 29 日发布。本次更新覆盖 Agent 团队协作、工作流编排、会话检索、Company 任务与例程管理、知识库读取、工作流状态恢复、HuggingFace 集成、Google Calendar 时区处理、Redis 检索、重排序器以及 AgentOS 客户端等多个方向。 这不是一次单纯… · 2026/11/3 18:53:00

证书过期了不知道怎么复审延期?自制电子电工证全国通用怎么操作
证书过期了不知道怎么复审延期?自制电子电工证全国通用怎么操作

证书过期了不知道怎么复审延期?自制电子电工证全国通用怎么操作 证书过期了不知道怎么复审延期?你是不是也遇到过这种情况:手上拿着一个【自制电子电工证】,但不知道怎么转异地、怎么补办、怎么复审?尤其是证书已经过期,或者马上要过期了,却找不到权威… · 2026/11/8 7:15:53

电工需要什么电工证 你了解含金量有多高吗
电工需要什么电工证 你了解含金量有多高吗

电工需要什么电工证 你了解含金量有多高吗 工地太忙根本没时间复习考试,这是很多一线电工的真实写照。很多人手里握着电工证,却对证书的种类、使用范围和含金量一知半解,甚至因为选错证种而影响了工作机会。如果你也在为“电工需要什么电工证”这个问题发… · 2026/11/8 7:15:53

广州电工证培训夜校值不值得考?怕被中介坑的电工看这篇就够了
广州电工证培训夜校值不值得考?怕被中介坑的电工看这篇就够了

广州电工证培训夜校值不值得考?怕被中介坑的电工看这篇就够了 你是不是也这样,看到网上一堆电工证培训广告,不知道哪家靠谱,怕被中介坑?尤其是想考高压电工证、低压电工证,又担心广州电工证培训夜校值不值得考?别急,这篇给你讲清楚。… · 2026/11/8 7:15:53

怎么区分强弱电工证 全国通用证书怎么选
怎么区分强弱电工证 全国通用证书怎么选

怎么区分强弱电工证 全国通用证书怎么选 怕考不过白交培训费?别再被培训机构忽悠了!特种作业操作证是电工行业进入门槛,但强弱电工证的区分不清,直接关系到你能不能持证上岗、能不能全国通用、能不能考过。本文从河南省安全生产监督管理局出台的最新政策… · 2026/11/8 7:15:53

电工证考试降压启动怎么准备?学历不高也能考,上岗必备全攻略
电工证考试降压启动怎么准备?学历不高也能考,上岗必备全攻略

电工证考试降压启动怎么准备?学历不高也能考,上岗必备全攻略 你是不是也担心自己学历不高,报不了电工证考试?别急,今天我就以驻马店公路工程从业者的角度,详细说说电工证考试降压启动的准备方法,告诉你 上岗必备… · 2026/11/8 7:15:52

考哪个电工证好就业 电子证书怎么选不踩坑
考哪个电工证好就业 电子证书怎么选不踩坑

考哪个电工证好就业 电子证书怎么选不踩坑 怕考不过白交培训费?别急,先搞清楚哪个证真能帮你找到活干。现在考电工证,最怕的就是花了钱、花了时间,结果证书没用,还得从头再来。别让电子证书变成“电子垃圾”,选对证是关键。 低压电工证 vs… · 2026/11/8 7:14:52

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20

电工证丢失还能补吗?千万别踩坑,丢了证等于失业
电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。… · 2026/11/8 0:00:20

电力电缆作业证直播报名入口与办理流程良心建议
电力电缆作业证直播报名入口与办理流程良心建议

电力电缆作业证直播报名入口与办理流程良心建议 你是不是也担心学历不高报不了名?别急,今天就给你讲讲 电力电缆作业证直播 的报名流程和那些你必须知道的干货, 良心建议 在这里,别错过。 电力电缆作业证直播报名需要什么条件?… · 2026/11/8 0:00:20

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑
英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑

英德电工证报考费多少钱,怕考不过白交培训费?看完这篇别再踩坑 怕考不过白交培训费?英德电工证报考费多少钱,你真的了解吗?现在市面上培训机构五花八门,价格参差不齐,很多人一不小心就花了冤枉钱,结果还考不过。别急,今天就来给你说清楚英德电工证的… · 2026/11/8 0:00:20

双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试
双极步进电机控制实战:DRV8818PWPR与PIC18F86K22驱动调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 11:25:08

STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析
STM32F207ZG + DRV8818PWPR 步进电机驱动实战解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/7 12:02:18

DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案
DRV8818PWPR+dsPIC30F4013工业级双极步进电机控制方案

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views … · 2026/11/8 1:18:25

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码