目录
[第二篇:核心代码验证|存储逻辑与 printf 输出机制](#第二篇:核心代码验证|存储逻辑与 printf 输出机制)
[1. 数据 Store 存储逻辑](#1. 数据 Store 存储逻辑)
[2. int 整型 printf 输出逻辑](#2. int 整型 printf 输出逻辑)
[3. char 逐字节输出逻辑*](#3. char 逐字节输出逻辑*)
[实验 1:int 强转 char* | 观测 Store 写入](#实验 1:int 强转 char* | 观测 Store 写入)
[实验 2:char 数组强转 int* | 观测 Load 读取](#实验 2:char 数组强转 int* | 观测 Load 读取)
第一篇:字节序本质|CPU、寄存器、存储器核心关系
一、核心硬件分工
字节序由 CPU、寄存器、存储器三者的数据交互机制决定,核心硬件分工如下:
• 寄存器(CPU 内部):唯一运算区域,存储临时数据。数据拥有「高字节、低字节」数值层级,无内存地址概念。
• 存储器(内存):数据持久存储区域。仅存在「低地址、高地址」地址顺序,无数值字节层级概念。
• CPU:负责数据搬运,包含 Load(内存→寄存器)、Store(寄存器→内存),字节序为 CPU 硬件固化规则。
二、字节序诞生原理
固定硬件搬运逻辑:运算只能在寄存器执行,持久数据只能存放在内存。
• 运算前:内存 ➜ 寄存器(Load 读取拼装)
• 运算后:寄存器 ➜ 内存(Store 拆解写入)
核心冲突(字节序唯一来源)
• 寄存器:按字节高低逻辑排布
• 内存:按地址高低物理排布
多字节数据在寄存器与内存相互搬运时,字节映射规则不同,衍生出大小端模式。
三、大小端可视化定义
• 小端(主流架构:x86/ARM):内存低地址 存放 寄存器低字节
• 大端(网络协议 / 嵌入式):内存低地址 存放 寄存器高字节
注:单字节 char 类型无字节序概念,仅多字节复合数据存在字节序差异。
第二篇:核心代码验证|存储逻辑与 printf 输出机制
一、验证代码
cs
#include <stdio.h>
int main()
{
int a = 0x11223344;
printf("%x\n",a);
// 逐字节读取内存原始数据
char *p = (char*)&a;
printf("%x %x %x %x\n",*p,*(p+1),*(p+2),*(p+3));
return 0;
}
二、小端环境标准输出
- 整型输出:11223344
- 逐字节输出:44 33 22 11
三、核心逻辑解析
1. 数据 Store 存储逻辑
int a = 0x11223344 在寄存器逻辑排布:11(高字节) 22 33 44(低字节)
小端 CPU 写入规则:低位字节存入内存低地址
内存物理排布(低地址→高地址):44 33 22 11
2. int 整型 printf 输出逻辑
读取整型变量时,CPU 自动将内存离散字节,按本机字节序重组为完整逻辑整数。
printf 固定按照「高字节在前、低字节在后」的数值规范输出,完全屏蔽内存物理排布。
3. char 逐字节输出逻辑*
char* 改变内存访问粒度,关闭 CPU 自动拼装功能。
直接按内存低地址→高地址遍历原始字节,输出内存真实存储状态。
第三篇:重难点辨析|整型变量与字符数组字节序差异
一、对照实验代码
cs
#include <stdio.h>
int main()
{
// 实验1:验证CPU Store 写入拆解规则
int a = 0x11223344;
char *p = (char*)&a;
printf("%x %x %x %x\n",*p,*(p+1),*(p+2),*(p+3));
// 实验2:验证CPU Load 读取拼装规则
char buf[4] = {0x01,0x02,0x03,0x04};
int *pi = (int *)buf;
printf("%x\n",*pi);
return 0;
}
二、实验可视化解析(极简无冗余)
实验 1:int 强转 char* | 观测 Store 写入
场景:完整整数 → CPU 拆解字节 → 写入内存
寄存器逻辑:高字节 11 22 33 44 低字节
小端写入规则:内存低地址 ⬅ 寄存器低字节
内存物理排布:低地址 44332211 高地址
输出结果:44 33 22 11
实验 2:char 数组强转 int* | 观测 Load 读取
场景:内存零散字节 → CPU 按规则拼装为完整整数
1. 数组内存固定排布 (与字节序无关):低地址 01020304 高地址
2. 小端读取规则:
- 内存低地址 ➜ 整型低位
- 内存高地址 ➜ 整型高位
3. 字节精准映射关系
- 内存地址递增: 01 (低地址) 02 03 04 (高地址)
- 对应整型位阶: 低位 次低位 次高位 高位
- 映射结果:01(低位) 02(次低位) 03(次高位) 04(高位)
- 拼装数值:0x04030201
- 输出结果:4030201
三、核心对比总结
int→char*:测试 Store 写入,整数拆解适配内存字节序
char 数组→int*:测试 Load 读取,内存字节拼装适配 CPU 字节序
全文终极结论
- 字节序是CPU 硬件特性,内存、数组仅为存储载体,无字节序属性;
- printf 打印 int 是逻辑数值(高字节优先),char* 遍历是物理内存(低地址优先);
- 数组内存顺序由代码定义,固定不变;
- Store 负责整数拆解写入,Load 负责字节拼装读取。