数据在内存中的存储---练习
练习1int main() { char a -1; signed char b -1; unsigned char c -1; printf(a%d,b%d,c%d, a, b, c); return 0; }1. 存储规则内存中存的都是补码char类型占1 字节 8 个比特位整数在内存中一律以补码形式存储。 数值-1的 8 位补码计算原码1000 0001最高位是符号位1 表示负反码1111 1110符号位不变其余位取反补码1111 1111反码 1因此三个变量a、b、c在内存里存储的二进制完全一样都是1111 1111区别只在于解读方式。2. 补充printf 的整型提升printf用%d输出时要求参数是int32 位类型char传参会自动发生整型提升有符号char提升高位补符号位符号位是 1 就全补 1 8 位1111 1111→ 32 位11111111 11111111 11111111 11111111作为int补码解析最终打印在屏幕上是原码的结果因为最高位是1为负数所以原码补码取反1且符号位不变:10000000 00000000 00000000 00000001值仍然是-1。无符号char提升高位统一补08 位1111 1111→ 32 位00000000 00000000 00000000 11111111作为int解析因为最高位是0为正数所以原反补码都相同依然是00000000 00000000 00000000 11111111所以值是255。练习2int main() { char a -128; printf(%u\n, a); return 0; }1. 存储-128 在 char 中的补码-128原码表示:10000000 00000000 00000000 10000000反码:11111111 11111111 11111111 01111111补码:10000000 00000000 00000000 10000000char类型取一个字节:10000000所以变量a在内存中存储的 8 位二进制是1000 00002. 传参发生整型提升printf的%u对应unsigned int类型char类型传参会自动整型提升为 32 位int。有符号 char 提升规则高位补符号位符号位是 1高位就全部补 18 位1000 0000提升为 32 位补码后11111111 11111111 11111111 10000000这个 32 位二进制作为有符号 int解读值仍然是-128。3. 输出% u 按无符号解读%u会把内存中的 32 位二进制直接当成无符号整数计算数值练习3int main() { char a 128; printf(%u\n, a); return 0; }1. 赋值溢出截断signed char的取值范围是-128 ~ 127128超出了有符号 char 的最大值发生溢出截断。 整数 128 的二进制低 8 位为1000 0000存入 char 变量时只保留这 8 位。 根据 8 位有符号补码规则1000 0000固定表示-128。 因此变量a内存中的实际值等价于-128。2. 传参整型提升printf传参时char类型会自动整型提升为 32 位int。 有符号 char 的提升规则高位补符号位符号位为 1高位全部补 1。 8 位1000 0000提升为 32 位补码11111111 11111111 11111111 10000000这个 32 位二进制作为有符号 int 解读值仍然是-128。3. 输出%u按无符号解析%u格式符会将 32 位二进制直接当作无符号整数计算数值结果与第二题一样练习4int main() { char a[1000]; int i; for (i 0; i 1000; i) { a[i] -1 - i; } printf(%d, strlen(a)); return 0; }1. strlen 的工作规则strlen从数组首地址开始逐个字节计数遇到值为0即\0的字节时停止返回停止位置之前的字符总数不包含\0本身。2. 数组元素的赋值规律数组是char类型默认signed char1 字节 8 位取值范围-128 ~ 127赋值规则为a[i] -1 - i。 但是计算结果会超出signed char范围。3. 数值变化过程当i从 0 到 127 时a[i]的值依次为-1, -2, -3 ... -128都在有符号 char 的范围内正常存储。当i128时 计算值为-129超出范围溢出后等价于-129 256 127即a[128] 127。当i从 129 继续增大时 数值依次递减126, 125 ... 2, 1。当i254时:a[254]的值是1当i255时:a[255]的值是04. 最终计数数组中第一个值为 0 的元素是a[255]strlen统计到此处停止。 从a[0]到a[254]一共 255 个非 0 字符因此strlen(a)的结果是255。练习5unsigned char i 0; int main() { for (i 0; i 255; i) { printf(hello world\n); } return 0; }1. 变量类型的取值范围unsigned char是 8 位无符号字符类型取值范围固定为0 ~ 255所有可能的取值都满足i 255这个判断条件。2. 循环的溢出回绕循环执行过程i从 0 开始递增依次执行循环体打印内容当i 255时仍然满足i 255会进入循环体执行打印循环体结束后执行i255 1超出了 8 位无符号数的范围发生无符号溢出 8 位二进制1111 1111加 1 后变为1 0000 0000截断低 8 位后结果为0000 0000即i的值变回 0。3. 死循环的形成i的值会在 0 → 255 → 0 → 255 之间无限循环永远不会出现i 255的情况循环条件恒为真程序永远不会退出循环。练习6int main() { unsigned int i; for (i 9; i 0; i--) { printf(%u\n, i); } return 0; }1. 无符号整数的取值特性unsigned int32 位环境的取值范围是0 ~ 4294967295它的所有合法取值都天然满足i 0因此循环判断条件i 0永远为真。2. 无符号下溢回绕当循环执行到i 0时依然满足i 0进入循环体打印0循环体结束后执行i--即0 - 1 -1无符号整数不支持负数-1会被当作无符号整数类型-1的补码是32个1:11111111 11111111 11111111 11111111因为被当做无符号整数所以-1就会转换成32个1也就是一个特别大的数42949672953. 死循环形成i从 9 递减到 0 后不会退出循环而是溢出回绕成最大值继续从4294967295往下递减。 由于无符号数永远不可能小于 0循环条件恒成立程序就会无限执行下去。练习7//X86环境 小端字节序 int main() { int a[4] { 1, 2, 3, 4 }; int* ptr1 (int*)(a 1); int* ptr2 (int*)((int)a 1); printf(%x,%x, ptr1[-1], *ptr2); return 0; }一、ptr1[-1]的结果4指针类型与加减规则a是整个数组的地址类型为int (*)[4]指向长度为 4 的 int 数组的指针。 指针加 1 的步长由指针类型决定a 1会跳过整个数组的大小4 个 int共 16 字节指向数组a末尾之后的第一个位置。强制类型转换与下标访问将a 1强制转为int*赋值给ptr1此时ptr1指向数组末尾后的第一个 int 位置。ptr1[-1]等价于*(ptr1 - 1)int 指针减 1向前回退 4 字节刚好指向数组的最后一个元素a[3]其值为4十六进制输出为4。二、*ptr2的结果0x2000000输出为2000000地址数值加 1 ≠ 指针加 1a是数组首元素地址类型为int*。(int)a将地址强制转换为整数此时1是纯数值加 1也就是地址仅向后偏移1 个字节而非一个 int 的长度。再转回int*后ptr2指向a[0]首地址 1 字节 的位置。小端字节序的内存布局int 占 4 字节x86 是小端模式数据的低字节存在内存低地址高字节存在内存高地址。 数组a的内存字节布局地址从低到高地址偏移01234567所属元素a[0]a[0]a[0]a[0]a[1]a[1]a[1]a[1]字节值0x010x000x000x000x020x000x000x00跨字节读取 intptr2从偏移 1 的位置开始读取 4 个字节取到的字节依次是0x00、0x00、0x00、0x02。 按小端规则低地址字节对应 int 的低位高地址字节对应 int 的高位组合后的 int 值为0x02000000十六进制输出为2000000

相关新闻

Agent插件生态与模型能力:决定智能代理实用价值的关键

Agent插件生态与模型能力:决定智能代理实用价值的关键

上周和一位做企业级应用集成的朋友聊天,他提到一个现象:过去半年,团队内部尝试了不下十种所谓的“智能助手”或“自动化流程工具”,但最终能真正融入日常工作、被团队高频使用的,只有两个——一个是因为它的插件能无缝…

2026/7/31 8:07:35 阅读更多 →
可兼容issi低功耗SRAM/nvSRAM的STT-MRAM替代嵌入式存储方案

可兼容issi低功耗SRAM/nvSRAM的STT-MRAM替代嵌入式存储方案

作为高性能工业级存储方案,RAMSUN推出的S3R8016并口STT-MRAM,是一款容量8Mbit的并行异步接口全随机存取存储器,可精准对标并替代同功能FRAM、低功耗SRAM及nvSRAM芯片,适配各类传统存储替换场景。 issi低功耗SRAM产品支持x16、x8两…

2026/7/31 8:06:35 阅读更多 →
一个能把漏洞报告交到你手里的YASA SKILL

一个能把漏洞报告交到你手里的YASA SKILL

本文作者:Zoar-yalz,浙江大学硕士生,研究方向为编译优化、软件分析等。github主页:github.com/Zoar-yalz 1. 这是什么? YASA Checker 是一个 OpenCode 智能体 Skill,它把三种分析手段串联成自动化管线&…

2026/7/31 8:06:35 阅读更多 →

最新新闻

Scratch图形化编程入门:从核心积木到塔防游戏实战

Scratch图形化编程入门:从核心积木到塔防游戏实战

1. 项目概述:为什么是Scratch?如果你正在寻找一个让孩子、编程初学者甚至是对逻辑思维感兴趣的人都能轻松上手的编程工具,那么Scratch几乎是一个无需犹豫的选择。它不像Python或Java那样,一上来就要面对密密麻麻的英文代码和复杂的…

2026/7/31 8:40:47 阅读更多 →
波长与RGB转换:从物理光谱到数字色彩的完整实现指南

波长与RGB转换:从物理光谱到数字色彩的完整实现指南

1. 项目概述:从光到色的桥梁做图像处理、前端开发、硬件调光,甚至是玩摄影和灯光设计的朋友,肯定都遇到过这样的场景:拿到一个光源的波长数据,比如一个LED灯珠标称发出625nm的红光,但你在代码里需要设置的是…

2026/7/31 8:40:47 阅读更多 →
从月更到日更,我的AI工作流重构实录:6个关键节点如何用对AI工具(含成本/效率/合规三重验证)

从月更到日更,我的AI工作流重构实录:6个关键节点如何用对AI工具(含成本/效率/合规三重验证)

更多请点击: https://codechina.net 第一章:从月更到日更:一场AI驱动的内容生产力革命 曾经,技术博客作者常被“选题难、写作慢、校对累”三座大山所困——一篇深度文章动辄耗时数日,月更已是常态。如今,A…

2026/7/31 8:40:47 阅读更多 →
网安新手入门必看—SRC漏洞是什么?公益漏洞和edu漏洞又是什么?一文讲清什么类型的漏洞才能赚钱!

网安新手入门必看—SRC漏洞是什么?公益漏洞和edu漏洞又是什么?一文讲清什么类型的漏洞才能赚钱!

很多网安新手刚入坑挖洞时,都会被各种专业名词搞混淆:SRC漏洞到底是什么?公益SRC能不能赚钱?EDU教育漏洞有什么价值?为什么别人提交的漏洞有几百、几千赏金,自己提交的漏洞要么被驳回、要么只有积分没有现金…

2026/7/31 8:40:47 阅读更多 →
空调智能节能控制系统:智能气候联动,动态调节空调节能模式

空调智能节能控制系统:智能气候联动,动态调节空调节能模式

一、方案背景 当前,商用楼宇、工业园区、校园、酒店、商超及办公场所等场景中,空调系统是建筑能耗的核心组成部分,占整体建筑耗电量的40%~60%。传统空调运行存在诸多痛点:人工管控粗放、开关机不及时、温湿度设置不合理、设备长期…

2026/7/31 8:40:47 阅读更多 →
企业级RAG技术:智能知识库的核心架构与优化实践

企业级RAG技术:智能知识库的核心架构与优化实践

1. 企业级智能知识库的现状与挑战 当前企业面临的最大痛点之一,就是如何有效管理和利用海量的非结构化数据。根据我的项目经验,一个中型企业每年产生的文档、邮件、会议记录等非结构化数据通常超过100GB,而传统的关键词检索方式只能解决30%左…

2026/7/31 8:39:46 阅读更多 →

日新闻

物理复制比逻辑复制好在哪?数据库复制原理详解

物理复制比逻辑复制好在哪?数据库复制原理详解

数据库复制是把主库数据同步到备库的机制,分为逻辑复制和物理复制两种。逻辑复制传输的是 SQL 语句或行变更事件,物理复制传输的是存储引擎底层的物理日志。阿里云 PolarDB(云原生数据库)采用物理复制,在同步延迟、数据…

2026/7/31 0:00:34 阅读更多 →
BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南

BilibiliDown:3分钟学会B站视频下载的终极指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bilib…

2026/7/31 0:00:34 阅读更多 →
有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

有哪些游戏数据AI平台?游戏行业Data+AI融合方案盘点

当前,游戏行业的“DataAI融合”已从概念验证进入价值落地阶段。根据IDC 2025年数据,中国AI游戏云市场规模已达18.6亿元;同时,游戏研发环节AI渗透率高达86%,生成式AI内容普及率超过50%。面对庞大的市场,游戏…

2026/7/31 0:00:34 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/31 1:03:03 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/29 14:34:28 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/31 4:19:39 阅读更多 →

月新闻