Skip to content

C++ 常用整型数据类型概览

C++ 提供了多种整型,用于存储整数值。它们的主要区别在于:

  1. 所占字节数(决定了能表示的数值范围)
  2. 是否带符号(能否表示负数)

1. 基本整型 (Native Types)

这些类型的大小可能因编译器和平台而异,但遵循一定的保证: sizeof(char) <= sizeof(short) <= sizeof(int) <= sizeof(long) <= sizeof(long long)

类型常见大小 (字节)范围 (示例, 32位系统)是否带符号用途
char1[-128, 127][0, 255]依赖实现字符存储,最小整数
signed char1[-128, 127]带符号同上,明确带符号
unsigned char1[0, 255]无符号同上,明确无符号
short2[-32,768, 32,767]带符号小范围整数
unsigned short2[0, 65,535]无符号小范围非负整数
int4[-2*10^9, 2*10^9] (约)带符号最常用,通用整数
unsigned int4[0, 4*10^9] (约)无符号通用非负整数
long4 或 8[-2*10^9, 2*10^9] (32位) 或 [-9*10^18, 9*10^18] (64位)带符号int 可能更大范围的整数
unsigned long4 或 8对应 long 的无符号范围无符号对应 long 的非负整数
long long8[-9*10^18, 9*10^18] (约)带符号最大范围,C++11引入
unsigned long long8[0, 1.8*10^19] (约)无符号最大范围非负整数,C++11引入

注:

  • 默认带符号:char 外,不加 signed 关键字的整型(如 int)默认是带符号的。
  • 无符号: 在类型前加 unsigned 关键字(如 unsigned int)。

2. 固定宽度整型 (C++11 <cstdint>)

为确保跨平台的一致性,C++11 引入了固定位宽的整型。推荐用于需要精确控制数据大小的场景(如文件格式、网络协议)。

类型宽度 (位)是否带符号典型用途
int8_t8带符号小整数,字节数据
int16_t16带符号短整数
int32_t32带符号常用整数,替代 int 以确保位宽
int64_t64带符号大整数,替代 long long 以确保位宽
uint8_t8无符号字节数据,颜色分量(0-255)
uint16_t16无符号端口号,图像像素值
uint32_t32无符号哈希值,计数器,替代 unsigned int 以确保位宽
uint64_t64无符号大哈希值,时间戳,替代 unsigned long long 以确保位宽

3. 最佳实践

  • 默认使用 int 除非有特定需求,int 是最常见的选择。
  • 需要大范围时: 优先考虑 long long
  • 需要明确位宽时: 使用 <cstdint> 中的固定宽度类型(如 int32_t, uint64_t),这能大大提高代码的可移植性和健壮性。
  • 非负数且范围要求: 使用 unsigned 版本或对应的 uintN_t
  • 内存优化(不常见): 仅在内存极其受限的嵌入式系统等场景下,才考虑使用 shortchar 作为数值类型。