数据的存储
标题目录数据存储整数在内存中的存储存储规则机器码大小端字节序以及其判断浮点数在内存中的存储数据存储整数在内存中的存储存储规则计算机内部使用二进制编码表示整数带符号的整数称为机器数包含符号位和数值位实际数值是真值。符号位数值位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/8/16 14:15:32 阅读更多 →
快速上手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/8/16 14:54:05 阅读更多 →
抖音直播下载到底卡在哪一步?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/8/16 15:10:41 阅读更多 →

最新新闻

微信聊天记录永久保存与年度报告生成:一次导出,装下你的一整年

微信聊天记录永久保存与年度报告生成:一次导出,装下你的一整年

微信聊天记录永久保存与年度报告生成:一次导出,装下你的一整年 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHu…

2026/8/16 15:55:45 阅读更多 →
告别命令行:Auto PY to EXE 如何三步把 .py 转成 .exe

告别命令行:Auto PY to EXE 如何三步把 .py 转成 .exe

告别命令行:Auto PY to EXE 如何三步把 .py 转成 .exe 【免费下载链接】auto-py-to-exe Converts .py to .exe using a simple graphical interface 项目地址: https://gitcode.com/gh_mirrors/au/auto-py-to-exe 小林刚转行做开发三个月,这天他…

2026/8/16 15:55:45 阅读更多 →
一次真实的迁移手记:如何用一个命令完成飞书文档批量导出

一次真实的迁移手记:如何用一个命令完成飞书文档批量导出

一次真实的迁移手记:如何用一个命令完成飞书文档批量导出 【免费下载链接】feishu-doc-export 飞书文档导出服务 项目地址: https://gitcode.com/gh_mirrors/fe/feishu-doc-export 周五下午四点半,领导走过来拍了拍我的肩膀:"下周…

2026/8/16 15:55:45 阅读更多 →
Spring AI Alibaba 入门开发-提示词功能、提示词模板、格式化输出(备份)

Spring AI Alibaba 入门开发-提示词功能、提示词模板、格式化输出(备份)

前置内容:Spring AI Alibaba 入门开发一-CSDN博客 一、提示词(Prompt)——基础 1.1 介绍 Prompt 是引导 AI 模型生成特定输出的输入格式,Prompt 的设计和措辞会显著影响模型的响应。 Prompt 最开始只是简单的字符串&#xff0…

2026/8/16 15:55:45 阅读更多 →
用遍所有AI论文工具[特殊字符]终于摸清稳过审的底层逻辑|OKBIYE真的不一样

用遍所有AI论文工具[特殊字符]终于摸清稳过审的底层逻辑|OKBIYE真的不一样

2026写论文真的别再盲目跟风用免费AI了! 之前为了省事,轮番试过各类通用大模型、平价论文AI,本想高效搞定论文,结果踩坑无数:要么AI检测直接高危、要么文献造假翻车、要么模板太重被导师一眼识破,反复返修…

2026/8/16 15:55:45 阅读更多 →
从零搭建自动驾驶训练数据:跟着 LMDrive 走通 7 个环节

从零搭建自动驾驶训练数据:跟着 LMDrive 走通 7 个环节

从零搭建自动驾驶训练数据:跟着 LMDrive 走通 7 个环节 【免费下载链接】LMDrive [CVPR 2024] LMDrive: Closed-Loop End-to-End Driving with Large Language Models 项目地址: https://gitcode.com/gh_mirrors/lm/LMDrive 想训练一辆由大语言模型驱动的自动…

2026/8/16 15:54:44 阅读更多 →

日新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者,最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent,从本地部署到云端API,我们正处在一个技术栈快速重构的节点。然而,面对层出不穷的模型、框架和工具&#xf…

2026/8/16 0:00:54 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/16 0:00:55 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。🍎 往期回顾关注个人主页:Matlab科研工作室👇 关注我领取海量matlab电子书和…

2026/8/16 0:03:55 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/16 6:00:23 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/16 6:00:24 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/16 6:00:27 阅读更多 →