核心结论:C 语言当中int是有符号基本整型,绝大多数 32 位平台下占用 4 字节(32 位),取值范围是 -2147483648 ~ 2147483647,也就是−231∼231−1。这里一定要记住上限是231−1,不是231,超出这个范围就会发生整型溢出,溢出之后结果是未定义行为,这是 C 语言笔试、计算机二级考试高频考点。同时要注意:C 标准并没有强制规定 int 固定 4 字节,它由编译器和 CPU 平台决定,老的 16 位平台 int 是 2 字节,范围会不一样。
基础信息对照表
| 类型 | 字节数(主流 32 位平台) | 是否有符号 | 取值范围 |
|---|---|---|---|
| int | 4 字节 | 有符号 | -2147483648 ~ 2147483647 |
| unsigned int | 4 字节 | 无符号 | 0 ~ 4294967295 |
| short int | 2 字节 | 有符号 | -32768 ~ 32767 |
| long int | 4 字节(32 位系统)/8 字节(64 位系统) | 有符号 | 随平台变化 |
| long long | 8 字节 | 有符号 | -9223372036854775808 ~ 9223372036854775807 |
原理讲解
有符号 int 采用补码存储,最高位是符号位:
- 符号位 = 0:正数
- 符号位 = 1:负数
32 位有符号整型,一共 31 位用来存数值位,所以最大值是231−1,最小值是−231,也就是 - 2147483648。
重点考点:为什么最小值绝对值比最大值大 1?
因为补码里面,0 只占用一种编码,负数可以多表示一个数值,这是补码存储的特点。
整型溢出重点
当运算结果超过 int 最大或者最小值,就会溢出:
int a = 2147483647;
a = a + 1; // 溢出,结果变成 -2147483648
⚠️ C 语言标准规定,有符号 int 溢出属于未定义行为(UB),编译器不同,运行结果有可能不一样,写代码的时候要主动规避。
而unsigned int溢出是定义好的,会自动按模232回绕。
代码查看 int 真实范围(考试常考写法)
可以直接调用头文件
include
include
int main()
{
printf("INT_MIN = %d\n", INT_MIN);
printf("INT_MAX = %d\n", INT_MAX);
return 0;
}
- INT_MIN:int 最小值
- INT_MAX:int 最大值
做题记忆要点
✅ 笔试填空题标准答案:int(4 字节有符号)范围 -2147483648 ~ 2147483647
✅ 公式:−231∼231−1
✅ 区分 int 和 unsigned int,无符号没有负数,最小值是 0
✅ 16 位平台 int 是 2 字节,范围 -32768~32767,题目如果明确是 16 位环境,就不能写 4 字节的范围
【常见问题】
问题 1 int 取值范围 c 语言,为什么最大值不是 2147483648?
回答:int 取值范围 c 语言考点,int 是有符号补码,最高位是符号位,有效数值位只有 31 位,所以最大值是231−1=2147483647,最小值是−231=−2147483648。
问题 2 int 取值范围 c 语言,int 是不是永远都是 4 个字节?
回答:int 取值范围 c 语言,C 语言标准只规定 int 至少 2 字节,不强制固定 4 字节,现在主流 32/64 位操作系统编译器 int 是 4 字节,老式 16 位平台 int 是 2 字节,取值范围会跟着改变。
问题 3 int 取值范围 c 语言,int 溢出会报错吗?
回答:int 取值范围 c 语言,有符号 int 溢出编译器一般不会主动报错,属于未定义行为,程序可能输出异常数值,甚至程序崩溃,写代码要提前判断数值是否越界。
问题 4 int 取值范围 c 语言,unsigned int 范围是多少?
回答:int 取值范围 c 语言,unsigned int 是无符号 4 字节整型,没有符号位,取值范围 0 ~ 4294967295,最大值是232−1。
免责申明
本文 int 取值范围 c 语言内容依据 C 语言标准以及主流编译器平台整理,不同 CPU、编译器、操作系统 int 字节长度可能存在差异,编程实战建议使用 limits.h 宏获取当前平台准确数值,本文仅作为备考学习参考。


