1. bit(比特)
计算机最小存储单位,仅存 1 位二进制:0或1,无单独寻址能力。
2. Byte(字节)
内存可直接寻址的最小基本单元
1Byte = 8 bit 所有内存读写、变量分配都以字节为单位。
3. 机器字长
定义:CPU单次运算 / 数据传输能处理的二进制位数,等于通用寄存器位数。
- 32 位 CPU:机器字长 = 32bit(4Byte)
- 64 位 CPU:机器字长 = 64bit(8Byte)
特性:
- 字长越长,单次可运算数据位数越多,运算性能更强;
- 定点数表示范围更大、浮点小数有效位数更多(数值精度更高);
- 决定系统最大寻址空间(地址总线位数匹配字长)。
4. int 与机器字长
C 语言标准强制约束:int最少16bit(2 字节)实际平台实现规则:
- 16 位老式机器:
int = 16bit - 32/64 位通用 PC:
int = 32bit(4字节)
规律:现代平台
int统一固定 32 位,不完全等于机器字长(64 位机字长 64,但 int 仍是 32)
5. unsigned long 与寻址、指针
指针(地址)
指针存储内存地址,宽度等于机器字长:
- 32 位机:指针
void*= 32bit(4B) - 64 位机:指针
void*= 64bit(8B)
unsigned long 平台差异
- 32 位系统:
unsigned long = 32bit,和指针宽度一致; - 64 位 Windows(LLP64 模型):
unsigned long = 32bit,指针 64bit(不等); - 64 位 Linux/macOS(LP64 模型):
unsigned long = 64bit,和指针宽度一致;
总结:仅类 Unix 64 位系统中unsigned long等于指针大小,Windows 64 位不满足,不能简单等同于寻址宽度。
易混对比速记表
| 概念 | 本质说明 | 单位关系 |
|---|---|---|
| bit | 最小二进制存储位 | 1bit = 0/1 |
| Byte | 内存最小寻址单元 | 1Byte = 8bit |
| 机器字长 | CPU 一次处理的数据位宽 | 32/64bit,等于寄存器位 |
| int | 基础整型,标准≥16bit | 现代平台固定 32bit |
| 指针 / 地址 | 存储内存地址,匹配机器字长 | 32 位 4B / 64 位 8B |
| unsigned long | 无符号长整型,平台可变 | Linux64=8B,Win64=4B |
补充易错点
- 不要认为
int一定等于机器字长:64 位 CPU 字长 64,但 int 依旧 32 位; - 不要认为
unsigned long永远等于指针:Windows64 下二者宽度不同; - 精度逻辑:同等编码方式下,位数越多,可表示数值范围越大、小数精度越高。