理解内存的高低地址和整数、浮点数的高低位是学习内存布局和数据存储的重要基础。
1. 内存的高低地址
内存地址是指在内存中访问数据的位置,以字节为单位。在32位系统中,地址范围是0到2^32-1
,而在64位系统中则更大。
- 低地址:更小的内存地址,通常靠近内存空间的起始位置(例如,
0x00000000
)。 - 高地址:更大的内存地址,通常靠近内存空间的末尾(例如,
0xFFFFFFFF
在32位系统中)。
当将一个多字节的数据(例如4字节的 int
或 float
)存储到内存时,如何排列这些字节在不同系统上有不同规则,这就是字节序。
2. 字节序(高低位的存储)
字节序(Endianness)是指多字节数据在内存中的排列顺序,分为大端序(Big-endian)和小端序(Little-endian)。
大端序(Big-endian)
- 高位字节存储在低地址,低位字节存储在高地址。
- 假设 32 位整数
0x12345678
,在内存中按大端序存储时会是:复制代码
地址 内容
-
0x00 0x12
-
0x01 0x34
-
0x02 0x56
-
0x03 0x78
小端序(Little-endian)
- 低位字节存储在低地址,高位字节存储在高地址。
- 同样的整数
0x12345678
,在小端序中存储时会是:复制代码
地址 内容
-
0x00 0x78
-
0x01 0x56
-
0x02 0x34
-
0x03 0x12
3. 整数的高低位
对于一个整数来说,高位和低位表示值从大到小的顺序。例如32位整数 0x12345678
,0x12
是最高字节位,0x78
是最低字节位。高位和低位的概念在表示数值时是固定的,不会因为字节序变化而改变。
4. 浮点数的高低位
浮点数的存储遵循 IEEE 754 标准。以 32 位单精度浮点数 float
为例,它分为三部分:
- 符号位(1 位):表示正负。
- 指数位(8 位):表示数值的指数部分。
- 尾数位(23 位):表示数值的有效部分。
浮点数的存储也受字节序影响。以 float
类型的 30.0
为例,它的 IEEE 754 表示为 0x41F00000
,在小端序系统中内存中排列为 00 00 F0 41
,而在大端序中排列为 41 F0 00 00
。
5. 区别总结
- 内存的高低地址:决定多字节数据在内存中的排列顺序(受字节序影响)。
- 数据的高低位:仅决定数据的值和权重位置,不受字节序影响,始终表示数值的高位和低位。