在 C/C++ 中,int、long 、long long是三种常用的整数类型,它们的大小和范围可能因平台和编译器而异。
int
大小:通常为 4 字节(32 位)。
范围:-2^31~2^31-1(10^9数量级)
用途:
1.适合大多数通用场景,例如计数器、数组索引、简单的数学运算等。
2.是 C/C++ 中最常用的整数类型,性能通常较好。
选择建议:如果数值范围在 ±21 亿以内,优先使用 int
。
long
大小:在 32 位系统上,通常为 4 字节(32 位),范围: int 相同。
在 64 位系统上,通常为 8 字节(64 位),范围: -2^63~2^63-1(10^18数量级)
用途:
1.适合需要更大范围的整数,但仍然需要考虑平台兼容性。
2.在 32 位系统上,long 和 int 可能没有区别。
选择建议:
如果需要更大的范围(例如超过 ±21 亿),并且代码主要在 64 位系统上运行,可以使用 long。
如果需要跨平台兼容性,建议使用固定长度的类型(如 int64_t)。
long long
大小:固定为 8 字节(64 位)。
范围:-2^63~2^63-1(10^18数量级)
用途:
1.适合需要非常大范围的整数,例如时间戳、大数计算等。
2.是 C99 标准引入的,具有固定的 64 位长度,跨平台兼容性更好。
选择建议:
如果数值范围超过 int 或 long 的范围,优先使用 long long。
如果需要明确的 64 位整数,优先使用 long long 而不是 long。
固定长度类型
为了确保代码的可移植性和一致性,C/C++ 提供了固定长度的整数类型
(定义在 <stdint.h> 或 <cstdint> 中)
int32_t:固定 32 位整数,范围与 int 相同。
int64_t:固定 64 位整数,范围与 long long 相同。
uint32_t 和 uint64_t:无符号版本。
选择建议:如果需要明确的位数和跨平台兼容性,优先使用固定长度类型(如 int32_t 或 int64_t)。
总结
数据类型 | 大小(字节) | 范围 | 使用场景 |
int | 4 | -2^31~2^31-1(10^9数量级) | 通用场景,性能优先 |
long | 4或8 |
32位机:同int 64位机:同long long | 需要更大范围,但平台兼容性不确定 |
long long | 8 | -2^63~2^63-1(10^18数量级) | 需要非常大范围,跨平台兼容性好 |
int32_t | 4 | 同int | 需要明确32位整数,跨平台兼容 |
int64_t | 8 | 同long long | 需要明确64位整数,跨平台兼容 |