数据的存储
标题目录数据存储整数在内存中的存储存储规则机器码大小端字节序以及其判断浮点数在内存中的存储数据存储整数在内存中的存储存储规则计算机内部使用二进制编码表示整数带符号的整数称为机器数包含符号位和数值位实际数值是真值。符号位数值位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。

相关新闻

【LeetCode算法题精讲】DP进阶——背包问题入门

【LeetCode算法题精讲】DP进阶——背包问题入门

知识梯度:浅(背包问题概念)→ 浅中(0-1 背包二维 DP)→ 中(滚动数组优化)→ 中深(416 分割等和子集)→ 深(完全背包→322 零钱兑换)→ 升华&#…

2026/10/13 5:11:55 阅读更多 →
快速上手AI瞄准辅助:YOLOv5自动瞄准部署与调优全攻略

快速上手AI瞄准辅助:YOLOv5自动瞄准部署与调优全攻略

快速上手AI瞄准辅助:YOLOv5自动瞄准部署与调优全攻略 【免费下载链接】AI-Aimbot Worlds Best AI Aimbot - CS2, Valorant, Fortnite, APEX, every game 项目地址: https://gitcode.com/gh_mirrors/ai/AI-Aimbot 想象一下这样的场景:在 CS2 或 Va…

2026/10/10 23:14:29 阅读更多 →
抖音直播下载到底卡在哪一步?5 分钟拆解一个免费开源工具

抖音直播下载到底卡在哪一步?5 分钟拆解一个免费开源工具

抖音直播下载到底卡在哪一步?5 分钟拆解一个免费开源工具 【免费下载链接】douyin-downloader A practical Douyin downloader for both single-item and profile batch downloads, with progress display, retries, SQLite deduplication, and browser fallback su…

2026/9/24 12:33:37 阅读更多 →

最新新闻

一条富碱性多肽的进阶之路:序列解析、合成纯化与核定位验证

一条富碱性多肽的进阶之路:序列解析、合成纯化与核定位验证

1. 从一条氨基酸序列反推蛋白身份:这条肽的“户口本”是这样查的拿到 PDGF A-Chain (194-211) 这个编号,加上后面那一串 GRPREGSKKRKRKRLKPT,我的第一反应不是急着做实验,而是先把它当成一个“嫌疑人”来审:它到底来自…

2026/10/14 6:04:23 阅读更多 →
Spring Boot微服务架构设计与实战指南

Spring Boot微服务架构设计与实战指南

1. 为什么Spring Boot成为微服务首选框架十年前我刚接触企业级应用开发时,EJB的复杂配置让人望而生畏。直到Spring Boot出现,用约定优于配置的理念彻底改变了Java开发方式。现在回想第一次用Spring Boot启动项目的场景:没有XML配置&#xff0…

2026/10/14 6:04:23 阅读更多 →
bl knowledge search 报 400 RagAgentGroupNotExist 怎么解决?阿里云百炼知识库检索与 agent 记忆节点使用步骤与常见报错排查

bl knowledge search 报 400 RagAgentGroupNotExist 怎么解决?阿里云百炼知识库检索与 agent 记忆节点使用步骤与常见报错排查

给 agent 补知识,阿里云百炼的 CLI(bl)里有两条路:bl knowledge 建知识库、包一层检索服务让它查;bl memory 按用户记节点。两条路的 ID 体系不一样,混用会撞上一个措辞很像服务端故障的 HTTP 400。 这篇按…

2026/10/14 6:04:23 阅读更多 →
微电网群协同调度中的目标级联法原理与Matlab实现

微电网群协同调度中的目标级联法原理与Matlab实现

1. 项目背景与核心价值微电网群协同调度是当前分布式能源领域的热点研究方向。传统集中式优化方法在面对多主体、高维度的微网群系统时,往往面临通信压力大、隐私保护难、计算复杂度高等问题。目标级联法(Analytical Target Cascading, ATC)通…

2026/10/14 6:04:23 阅读更多 →
汽车线束开发中的BOM图纸与检验记录管理

汽车线束开发中的BOM图纸与检验记录管理

汽车线束从设计到样品、再到量产,BOM材料清单、图纸和检验记录需要保持关联。连接器替换或支路调整后,如果相关文件没有同步更新,资料评审就可能遗漏要求。建立清晰的版本和关联关系,有助于工程与采购对齐信息。首先,为…

2026/10/14 6:04:23 阅读更多 →
PS5进阶玩家手册:系统设置、SSD扩容、网络调优与串流实战

PS5进阶玩家手册:系统设置、SSD扩容、网络调优与串流实战

接手的这台“AnyPS5”时,我第一反应是:这名字起得挺大。光是PS5相关的外设、存储、网络、串流、保养,随便列一列就够写好几篇长文。后来想明白了,所谓“Any PS5”,并不是什么第三方工具或改装固件,而是玩家…

2026/10/14 6:03:23 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/12 18:11:17 阅读更多 →