c 语言中的 int 范围,主流 32 位和 64 位平台默认是 4 字节也就是 32 位,属于有符号整型,取值区间是负 2147483648 到正 2147483647,int 最高位是符号位,0 代表正数,1 代表负数,底层使用补码存储,所以负数最小值的绝对值比正数最大值多 1,很多初学者容易误以为正负边界完全对称,这是高频易错点,C 语言标准没有强制规定 int 必须固定 4 字节,老的 16 位平台 int 是 2 字节,范围更小,跨平台编码不建议硬写死边界数字,推荐引入 limits.h 头文件,使用 INT_MAX 和 INT_MIN 宏来读取边界,当运算数值超过 int 承载上限或者下限,就会发生整数溢出,溢出属于未定义行为,编译器一般不会主动报错,计算结果会出现异常错乱。
之所以 int 范围由补码决定,是因为有符号整数采用补码编码方案,不需要单独占用编码表示负零,充分利用二进制位,31 位数值位全部为 1 就是最大正数,也就是 2 的 31 次方减一,负数最小是负 2 的 31 次方,这种设计也是计算机底层统一的整数存储方案,理解补码之后,就能明白为什么正负边界不是对称的,同时也能看懂溢出之后数值回绕的原理。
基础核心说明
int 全称是 signed int,默认就是有符号整型,可以存储负数零正数。
头文件宏定义,INT_MAX 代表 int 最大值,INT_MIN 代表 int 最小值,定义在 limits.h 里面。
存储单位,主流平台 4 字节,一共 32 个二进制位,最高位为符号位。
平台对比表格
| 平台类型 | int 字节长度 | 总位数 | 取值范围 |
|---|---|---|---|
| 16 位老旧系统 | 2 字节 | 16 位 | 负 32768 到 32767 |
| 主流 32 位 64 位系统 | 4 字节 | 32 位 | 负 2147483648 到 2147483647 |
重点易错知识点
整数溢出,数值超过 int 范围不会自动升级成更大类型,会发生回绕,属于未定义行为,不能依赖溢出后的结果做业务判断。
如果数值超过 int 范围,可以更换 long long 类型,long long 一般是 8 字节,可表示数值范围大很多。
如果只需要保存非负整数,可以使用 unsigned int,没有符号位,范围是 0 到 4294967295,不能存储负数。
两个 int 相加,就算最后赋值给 long long,相加瞬间已经溢出,结果依然错误,需要提前把变量强制转换成大类型再运算。
c 语言中的 int 范围核心就是 32 位有符号补码的数值边界,掌握符号位补码溢出原理,清楚不同平台字节长度存在差异,写代码处理大数值的时候提前判断是否超出 int 承载能力,必要时更换更大整型类型,避免溢出带来逻辑错误。
【常见问题】
问题 1 c 语言中的 int 范围最大值是多少
回答 1 c 语言中的 int 范围在主流 4 字节平台最大值是 2147483647,对应宏 INT_MAX,存放在 limits.h 头文件。
问题 2 c 语言中的 int 范围为什么负数最小值绝对值更大
回答 2 c 语言中的 int 范围依靠补码存储,补码不需要表示负零,所以负数最小值负 2147483648,正数最大是 2147483647,绝对值不对称。
问题 3 c 语言中的 int 范围溢出程序会报错吗
回答 3 c 语言中的 int 范围溢出属于未定义行为,编译器一般不会主动报错,程序计算结果会异常,不能使用溢出结果作为判断依据。
问题 4 c 语言中的 int 范围不够可以替换成什么类型
回答 4 c 语言中的 int 范围如果不足以存储大整数,可以改用 long long 类型,它一般是 8 字节,可以表示更大整数数值。
【免责申明】
本文内容仅用于 c 语言学习参考,int 字节长度和取值范围会随编译器平台变化,请结合编译环境使用 limits.h 宏验证,相关内容不构成绝对标准承诺,相关风险由使用者自行承担。


