C++中整形数据类型的字节数与取值范围详解
C++标准仅规定了各整形类型的最低位数要求,实际字节数取决于编译平台。本文梳理了short、int、long等类型在32位和64位环境下的具体表现、数值范围及对应的极限常量定义。
整形数据类型的长度规定
C++标准规范了基本整数类型的最小存储宽度,这保证了代码在不同平台间的可移植性基础。具体约束如下:
short:至少占用 16 位(2字节)。int:至少与short一样长,通常用于表示最常见的整数。long:至少占用 32 位(4字节),且必须至少与int一样长。long long:至少占用 64 位(8字节),且必须至少与long一样长。
典型环境:64位 Windows 7 示例
在现代 64 位系统中(如 Windows 7 64位版),常见整型的实际字节分配通常遵循以下模式:
| 类型 | 字节数 (Byte) |
|---|---|
| char | 1 |
| short | 2 |
| int | 4 |
| long | 4 |
| long long | 8 |
在此架构下,int 和 long 大小一致。需注意,Linux/Unix 64位系统(LP64模型)通常将 long 扩展至 8 字节,而 Windows 64位系统使用 LLP64 模型保持 long 为 4 字节。
32位程序下的整形范围
在 32 位系统中,long 和 unsigned long 通常为 32 位。下表列出了有符号与无符号类型的完整取值区间:
| 数据类型 | 最小值 | 最大值 |
|---|---|---|
char |
-128 | 127 |
unsigned char |
0 | 255 |
short |
-32,768 | 32,767 |
unsigned short |
0 | 65,535 |
int |
-2,147,483,648 | 2,147,483,647 |
unsigned int |
0 | 4,294,967,295 |
long |
-2,147,483,648 | 2,147,483,647 |
unsigned long |
0 | 4,294,967,295 |
int32_t |
-2,147,483,648 | 2,147,483,647 |
uint32_t |
0 | 4,294,967,295 |
int64_t |
-9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
uint64_t |
0 | 18,446,744,073,709,551,615 |
64位程序下的整形范围
在典型的 64 位程序环境中(特别是 Windows),主要区别在于 long 类型的尺寸仍可能保持 4 字节,但在某些 Unix 类系统中变为 8 字节。此处以常见的 Windows 64位环境为例,注意 long 的范围与 int 相同;若为 Linux 64位,long 将具备 64 位范围:
| 数据类型 | 最小值 | 最大值 |
|---|---|---|
char |
-128 | 127 |
unsigned char |
0 | 255 |
short |
-32,768 | 32,767 |
unsigned short |
0 | 65,535 |
int |
-2,147,483,648 | 2,147,483,647 |
unsigned int |
0 | 4,294,967,295 |
long |
-2,147,483,648 (Windows) / -9.22e18 (Linux 64) |
2,147,483,647 (Windows) / 9.22e18 (Linux 64) |
unsigned long |
0 (Win: ~4.29e9) / ~1.84e19 (Linux 64) |
4,294,967,295 (Win) / 18,446,744,073,709,551,615 (Linux 64) |
int64_t |
-9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
uint64_t |
0 | 18,446,744,073,709,551,615 |
提示:为了确保跨平台一致性并避免溢出,建议在处理固定宽度数据时使用 int32_t、uint64_t 等来自 <cstdint> 的精确宽度类型。
利用 climits 获取系统极限值
C++ 标准库头文件 <climits> 定义了各类字符和整型的最大/最小值宏,可直接在代码中使用,无需记忆具体数字:
| 符号常量 | 含义 |
|---|---|
CHAR_BIT |
char 的位数 |
CHAR_MAX / CHAR_MIN |
char 的最大/小值 |
SCHAR_MAX / SCHAR_MIN |
signed char 的最大/小值 |
UCHAR_MAX |
unsigned char 的最大值 |
SHRT_MAX / SHRT_MIN |
short 的最大/小值 |
USHRT_MAX |
unsigned short 的最大值 |
INT_MAX / INT_MIN |
int 的最大/小值 |
UINT_MAX |
unsigned int 的最大值 |
LONG_MAX / LONG_MIN |
long 的最大/小值 |
ULONG_MAX |
unsigned long 的最大值 |
LLONG_MAX / LLONG_MIN |
long long 的最大/小值 |
ULLONG_MAX |
unsigned long long 的最大值 |
以上就是C++中整形数据类型的字节数、范围及相关常量的详细内容,更多关于C++基础知识的学习资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









