发布时间:2026/8/15 13:59:57
数据的存储 标题目录数据存储整数在内存中的存储存储规则机器码大小端字节序以及其判断浮点数在内存中的存储数据存储整数在内存中的存储存储规则计算机内部使用二进制编码表示整数带符号的整数称为机器数包含符号位和数值位实际数值是真值。符号位数值位0为正1为负数的绝对值机器码整数的二进制表示方法有三种即原码、反码、补码。正整数的原码、反码、补码相同。负整数原码为将数值按照正负数的形式翻译为二进制形式得到的数值码。反码为原码的符号位不变数值位按位取反。补码为反码加一。在计算机中统一采用补码的存储及运算。计算机硬件中只有加法器补码可以将符号位和数值域统一处理减法运算转换为加法运算简化了运算器的设计不需要额外的硬件电路。大小端字节序以及其判断概念如下图所示在vs调试当中我们取地址a,可以发现它是按照字节为单位倒着存储的。那下面我们一起来探讨一下数据在内存中存储顺序的问题。在计算机中内存的编制是由字节组成的一个多字节的数据会占用连续多个字节。按照不同的存储顺序我们分为大端模式和小端模式。大端存储数据的低位字节内容保存在内存的⾼地址处⽽数据的⾼位字节内容保存在内存的低地址处。小端存储数据的低位字节内容保存在内存的低地址处⽽数据的⾼位字节内容保存在内存的⾼地址处。大端字节序常用于网络协议、嵌入式、单片机。小端字节序常用于x86 架构 PC、Windows、Linux日常电脑都是小端。练习1利用大小端字节序的概念设计一个简单的程序判断当前机器的字节序。int check_order() { int i 1; return (*(char*)i); } int main() { int ret check_order(); if (ret 1) { printf(小端\n); } else { printf(大端\n); } return 0; }代码解析定义 int i1,整形为4个字节在二进制编码当中为00 00 00 01高字节为 00 00 00低字节为 01取变量 i 的低地址将其强制转换为char类型只读取1个字节并解引用取出第一个字节的值。主函数判断内存低地址 → 高地址 01 00 00 00返回值为1为小端。高字节 → 低地址 00 00 00 01返回值为0为大端。练习2int main() { char a -1; signed char b -1; unsigned char c -1; printf(%d,%d,%d\n, a, b, c); return 0; }运行结果如下代码解析由于打印格式为%d需要整形提升提升规则有符号数按符号位扩展高位补符号位无符号数高位补0a的原码 10000000 00000000 00000000 00000001反码 111111111 111111111 111111111 111111110补码 111111111 111111111 111111111111111111内存补码为11111111提升后补码为 111111111 111111111 111111111 111111111 真值为-1。同理b打印也为-1。同理c的内存存储为11111111提升后补码为00000000 00000000 00000000 111111111真值为255。练习3int main() { char a -128; printf(%u\n, a); return 0; }%u为无符号数打印形式a为char类型需要整型提升-128 原码 - 10000000 00000000 00000000 10000000 反码 - 11111111 11111111 11111111 01111111 补码 - 11111111 11111111 11111111 10000000 内存存储 - 10000000 整型提升 - 11111111 11111111 11111111 10000000结果如下图所示练习4int main() { char a 128; printf(%u\n, a); return 0; }结果如下图所示练习5#include string.h int main() { char a[1000]; int i; for ( i 0; i 1000; i) { a[i] -1 - i; } printf(%zd, strlen(a)); return 0; }求数组a的字符串长度- 在‘\0’0前的字符串长度-1-i为依次-1的循环模式范围为-1 - -128 - 127- 0结果如下图所示练习6unsigned char i 0; int main() { for(i 0; i 255; i) { printf(hello world\n); } return 0; }代码结果为无限循环。无符号数的取值范围为0~255。如果数值大于255(二进制为11111111)增一为100000000取八位为00000000即返回0。练习7#include Windows.h int main() { unsigned int i; for (i 9; i 0; i--) { printf(%u\n,i); Sleep(1000); } return 0; }代码结果为无限循环。无符号整数的取值范围很大为0-32位的1组成的数。所以 i0 的判断恒成立,程序会无限循环。结果如下图所示练习8int main() { int a[4] { 1,2,3,4 }; int* ptr1 (int*)(a 1); int* ptr2 (int*)((int)a 1); printf(%x,%x\n, ptr1[-1], *ptr2); return 0; }如图所示地址偏移(字节): 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ... 对应元素: ───── a[0]1 ────┼───── a[1]2 ────┼───── a[2]3 ────┼───── a[3]4 ────┼ 数组外未知内存 字节归属: 0~3号字节 4~7号字节 8~11号字节 12~15号字节 16号及以后ptr1: a 表示数组首元素的地址 a 表示整个数组的地址 a1 表示跳过整个数组 (int*)(a1)即ptr1 解引用表示一个数组的单个元素 ptr1[-1] 即为4偏移: 0 ... 15 16 ↑ ↑ a ptr1 a1 的位置 偏移: 12 13 14 15 | 16 ↑ ↑ a[3]4 ptr1 (ptr1 - 1)ptr2: (int)a 表示将a强制转换为普通整数 (int)a1 纯数值 1只偏移 1 个字节 再强制转回 int*得到 ptr2偏移: 0 1 2 3 ↑ ↑ a ptr2 a[0]首字节 a[0]第2字节结果如下图所示浮点数在内存中的存储基础划分类型总位数符号位 (S)阶码 (E)尾数 (M)float单精度32 bit1 bit8 bit23 bitdouble双精度64 bit1 bit11 bit52 bit内存布局高位 → 低位符号位 S 阶码 E 尾数 M存储规则浮点数在计算机内部的表示方法S表示符号位0为正数1为负数。M表示有效数字区间为1M2。E为指数位。存储过程浮点数存放有效数字M约定二进制浮点数整数部分固定为 1所以可以被舍去只存小数部分写作1.M。这一步叫隐藏整数 1可以节省 1 位空间。指数E规定:E是一个无符号整数。但在科学计数法中,E可以有负数的形式出现。所以当存入内存时指数E需要将原有的真实值加上一个中间数。对于8位的E,取值范围为0-255中间数位127。对于11位的E,取值范围为0-2047中间数位1023。浮点数取值规格化浮点数E不为全0或不为全1指数E的计算值减去127或1023得到真实值再将有效数字M前加上第⼀位的1。非规格化浮点数E为全0将隐藏的整数 1 取消小数变为 0.M。表⽰±0以及接近于0的很小的数字。E为全1如果有效数字M全为0表⽰±无穷⼤正负取决于符号位s。

相关新闻

2026/8/15 13:54:56

C# Modbus插件化架构:10分钟构建可配置的工业数据采集系统

如果你正在用 C# 开发工业自动化上位机或数据采集系统,并且厌倦了每次对接新设备都要重写一遍 Modbus 通信代码,那么这篇文章就是为你准备的。今天要介绍的不是一个具体的开源项目,而是一个基于 C# 快速构建 Modbus 插件系统的核心思路与实现…

2026/8/15 16:25:06

OWASP Top 10核心漏洞解析:从原理到实战的Web安全防御指南

1. 项目概述:为什么OWASP Top 10是安全入门的“必修课”? 如果你刚踏入网络安全这个领域,或者是一名开发者想提升自己代码的安全性,那么“OWASP Top 10”这个词组你一定会反复听到。它就像一份“通缉令”,上面列出的不…

2026/8/15 16:25:06

TortoiseGit图形化解决Git代码冲突:从原理到实战的完整指南

1. 项目概述:当代码“撞车”时,我们该怎么办?如果你用过Git,尤其是配合TortoiseGit这个图形化工具,那“代码冲突”这个词对你来说绝对不陌生。它不是什么高深的理论,而是每个开发者协作过程中必然会遇到的“…

2026/8/15 9:46:30

如何快速生成中国车牌图片:Python开源工具完整指南

如何快速生成中国车牌图片:Python开源工具完整指南 【免费下载链接】chinese_license_plate_generator 中国车牌生成器 项目地址: https://gitcode.com/gh_mirrors/ch/chinese_license_plate_generator 中国车牌生成器是一个基于Python的开源项目&#xff0c…

2026/8/15 7:22:41

当 LLM 遇见大文档:主流开源项目如何处理上下文超限

从 Agentic Loop 到 Repo Map,七种策略与六类陷阱引言:128K vs 10MB 的硬冲突 2026 年的 LLM 上下文窗口已达到 128K ~ 1M token(≈ 0.5MB ~ 4MB 文本),但 LLM 想要处理的真实数据规模远远超过这个量级:真实…

2026/8/15 0:04:00

AI 电动婴儿车智能功率 辅助控制、电源管理的完整选型方案

2026年随着 AI 技术在电动孕婴童用品中的深度渗透(如智能避障、自适应速度控制、能量回收),电动婴儿车对功率器件提出更高要求:高效率、小型化、低功耗、高可靠性。微碧半导体(VBsemi)基于 Trench 及 SGT 工…

2026/8/15 0:04:00

论文AIGC检测不达标完整教程!低门槛用5款工具逐步复检!

论文提交前自己先查一遍AI率,是2026年毕业生的常规动作。学校要求论文AI率低于30%,乃至于20%才能答辩… 很多同学发现一个尴尬的事情:同一篇论文,知网查出来AI率35%,维普查可能是48%,大雅、朱雀又是另外的数…

2026/8/15 9:46:39

实测才敢推 AI论文网站 2026最新测评与推荐

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。一、综…

2026/8/15 4:56:16

2026必备!AI论文网站测评:最新推荐与深度对比

2026年真正好用的AI论文网站,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

2026/8/15 9:46:30

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…