首页 >> 严选问答 >

问int 取值的范围 C 语言整型深度解析

2026-11-07 23:45:57

答

int 是 C 语言里面最常用的有符号基本整型,绝大多数编译器里面 int 占 4 个字节也就是 32 位,取值范围是负 2 的 31 次方到正 2 的 31 次方减 1,也就是 - 2147483648 到 2147483647,这里一定要记住上限是 2 的 31 次方减 1,原因是 32 位里面最高一位是符号位,0 代表正数,1 代表负数,剩下 31 位用来存储数值,正数最大值要减去 1,这个考点是计算机二级 C 语言考试必考内容,但是 int 并不是固定永远 4 字节,它的字节长度由编译器和操作系统决定,早期 16 位平台 int 是 2 字节,取值范围就变成 - 32768 到 32767,所以写代码的时候不能死记一个数值,要理解背后原理,如果需要固定长度的整型,推荐使用 stdint.h 里面的 int32_t 这类类型,避免跨平台兼容问题,当数值超过 int 取值的范围,就会发生整数溢出,溢出之后数值会变成异常结果,不会自动报错,这也是编程里面非常隐蔽的 bug。

一 核心原理说明

int 属于有符号整型,采用补码存储

总位数 32 位

最高位 符号位

正数区间 0 到 2147483647

负数区间 -2147483648 到 -1

总可表示数字个数 2 的 32 次方个

二 不同平台 int 取值范围对照表

类型字节数位数取值范围
int 32 位平台4 字节32 位-2147483648 ~ 2147483647
int 16 位平台2 字节16 位-32768 ~ 32767
unsigned int 无符号4 字节32 位0 ~ 4294967295

重点区分,unsigned int 是无符号 int,没有符号位,全部位都存数字,最小值是 0,不存在负数,很多初学者会把有符号 int 和无符号 int 取值范围搞混。

三 相关配套整型范围拓展

short 短整型,一般 2 字节,范围 -32768 ~ 32767

long 长整型,32 位系统一般 4 字节,64 位系统一般 8 字节

long long 长长整型,固定 8 字节,范围 -9223372036854775808 ~ 9223372036854775807

四 整数溢出问题

当赋值或者计算结果超过 int 取值的范围,就会发生溢出

举例 int a = 2147483647,再加 1 之后,不会变成 2147483648,而是变成 -2147483648

溢出属于未定义行为,不同编译器表现有可能不一样,程序不会主动弹出错误提示,很容易造成逻辑错误

解决办法 预估数值大小,如果数值会超过 int 取值范围,改用 long long 类型,或者使用无符号 unsigned int

五 编程实操要点

可以使用头文件 limits.h 里面的宏,直接调用系统定义的 int 上下限

INT_MAX 代表 int 最大值 2147483647

INT_MIN 代表 int 最小值 -2147483648

代码示例

include

printf ("% d", INT_MAX);

这个写法跨平台,不需要手动写死数字,推荐正式项目使用

六 常见误区

误区一 int 永远是 4 字节,这个是错误,int 长度由平台决定,只是现在主流电脑都是 32 位 int

误区二 int 最大值是 2 的 31 次方,正确是 2 的 31 次方减 1,考试填空经常在这里挖坑

误区三 int 溢出程序会报错,实际 C 语言不会主动报错,属于未定义行为

误区四 unsigned int 也可以存负数,无符号 int 没有符号位,赋值负数会转换成很大的正数

【常见问题】

问题 1 int 取值的范围,为什么最大值是 2147483647 而不是 2147483648

回答 1 int 取值的范围里面,int 是 32 位有符号整型,最高位是符号位,只有 31 位用来存数值,所以正数最大值是 2 的 31 次方减 1,也就是 2147483647,这就是 int 取值的范围上限的由来。

问题 2 int 取值的范围,16 位平台 int 是多少

回答 1 int 取值的范围会随平台变化,16 位平台 int 占 2 字节,int 取值的范围是 - 32768 到 32767,和现在主流 4 字节 int 的 int 取值的范围不一样。

问题 3 int 取值的范围,超过 int 取值的范围会怎么样

回答 1 如果计算结果超过 int 取值的范围,会发生整数溢出,数值变成异常结果,C 语言不会自动报错,属于未定义行为,数值过大的时候要更换 long long 类型。

问题 4 int 取值的范围,unsigned int 和普通 int 取值的范围有什么区别

回答 1 int 取值的范围是有符号,可以存储负数,unsigned int 是无符号版本,没有符号位,int 取值的范围变成 0 到 4294967295,不能保存负数。

【免责申明】

本文内容为 C 语言 int 取值范围编程科普,仅用于考试学习参考,不同编译器 操作系统对 int 字节长度定义存在差异,具体数值以当前开发环境 limits.h 宏定义为准,本文不构成工业级项目编码规范标准。

 

相关阅读

标签: int取值的范围
最新文章