数据类型范围的含义是什么?int类型的65535与2147483647有何关联
int类型两种最大值差异说明
本质原因:int的长度不是跨平台固定值
C语言标准仅约定了int的最小长度为16比特(2字节),实际占用字节数由编译器适配的CPU架构决定:
- 16位架构(早期8086处理器、多数单片机场景)下,
int固定占2字节(16比特) - 目前主流的32位、64位桌面/服务器架构下,
int普遍占4字节(32比特)
65535的实际指代
65535是16位无符号int的最大值,计算逻辑如下:
- 16比特总共可以表示2^16 = 65536个不同数值
- 无符号场景下所有比特位都用来存储正整数,取值范围为
0 ~ 2^16 -1,也就是0到65535
如果是16位有符号int,最高位会被用作符号位,最大值为2^15 -1 = 32767,取值范围是-32768 ~ 32767。
2147483647的实际指代
你测试得到的2147483647是32位有符号int的最大值,对应你当前使用的32/64位主流开发环境,计算逻辑如下:
- 32比特总共可以表示2^32 = 4294967296个不同数值
- 有符号场景下最高位为符号位,剩余31位存储数值,最大值为2^31 -1 = 2147483647,取值范围是
-2147483648 ~ 2147483647
如果是32位无符号int,最大值为4294967295。
环境验证方法
你可以运行以下C代码直接查看当前开发环境的int参数:
#include <stdio.h> #include <limits.h> int main() { printf("int 占用字节数:%zu\n", sizeof(int)); printf("有符号int最大值:%d\n", INT_MAX); printf("有符号int最小值:%d\n", INT_MIN); printf("无符号int最大值:%u\n", UINT_MAX); return 0; }
内容的提问来源于stack exchange,提问作者Deepak C
相关产品推荐
相关产品推荐

