1. C语言整数类型深度解析
作为一名在嵌入式领域摸爬滚打十年的老程序员,我见过太多因为整数类型使用不当导致的"灵异事件"——从传感器数据溢出到内存越界,这些坑都是用血泪换来的教训。今天我们就来彻底解剖C语言中最基础也最容易被低估的整数类型。
特别提醒:在8051单片机中,int类型默认是16位的!这个特性让很多从x86平台转过来的工程师栽过跟头
1.1 整数类型的底层表示
所有整数类型最终都是以二进制补码形式存储在内存中。以32位int为例:
- 最高位是符号位(0正1负)
- 正数直接存储原码
- 负数存储其绝对值的补码
c复制// 验证补码的经典代码
#include <stdio.h>
int main() {
int a = -5;
unsigned int b = (unsigned int)a;
printf("%u\n", b); // 输出4294967291(即2^32-5)
return 0;
}
这个特性导致一个常见陷阱:当把有符号整数当作无符号数处理时,负数会变成巨大的正数。我在早期做温度传感器项目时就因此产生过严重的数据异常。
1.2 标准整数类型全览
C99标准明确规定了各类型的取值范围(需要包含<stdint.h>):
| 类型 | 位数 | 最小值 | 最大值 |
|---|---|---|---|
| int8_t | 8 | -128 | 127 |
| uint8_t | 8 | 0 | 255 |
| int16_t | 16 | -32768 | 32767 |
| uint16_t | 16 | 0 | 65535 |
