
查 INT_MAX 和 INT_MIN 是最准的
别靠记忆或查旧文档——C++ 标准只要求 int 至少 16 位,实际大小由编译器+平台决定。Windows、Linux、macOS 上绝大多数主流编译器(MSVC、GCC、Clang)都把 int 实现为 32 位,但嵌入式环境(比如某些 ARM Cortex-M 编译器)可能仍是 16 位。
真正靠谱的方式是运行时查宏:
#include <climits>
#include <iostream>
int main() {
std::cout << "int: " << sizeof(int) << " bytes\n";
std::cout << "min = " << INT_MIN << ", max = " << INT_MAX << "\n";
}
输出通常是:int: 4 bytesmin = -2147483648, max = 2147483647
为什么不能直接写 2147483647?
硬编码字面量会掩盖可移植性风险。比如在某个老 DSP 平台,int 是 16 位,2147483647 就根本不是 int 能存下的值,编译可能不报错(它会被当 long long 处理),但运行时行为就不可控了。
- 用
INT_MAX可以让代码自动适配当前平台的int实际范围 - 如果逻辑依赖“最大值”,比如做边界检查或初始化哨兵值,必须用宏而非字面量
- 注意:
INT_MAX是int的最大值,不是unsigned int的;后者要用UINT_MAX
long 和 long long 别混着用
long 在 Windows(64 位)上仍是 32 位,和 int 一样;但在 Linux/macOS(64 位)上是 64 位。这意味着同一份代码在不同系统上,sizeof(long) 可能是 4 或 8 —— 容易引发隐式截断或符号扩展错误。
立即学习“C++免费学习笔记(深入)”;
- 需要跨平台稳定 64 位整数,必须用
long long(C++11 起保证 ≥64 位)或更推荐的int64_t(来自<cstdint></cstdint>) -
long long的最大值是LLONG_MAX(约 9.2e18),最小值是LLONG_MIN;别误用LONG_MAX - 输入输出格式也不同:
%d对int,%ld对long,%lld对long long;用错会导致未定义行为
什么时候该放弃 int?
不是所有“整数”都适合用 int。比如处理文件大小、内存地址偏移、高精度计时戳(如 std::chrono::nanoseconds::count())、大数组索引(>2GB)——这些场景下,int 的 32 位上限(21 亿)很快就会溢出。
- 数组下标建议用
size_t(无符号,与指针宽度一致) - 时间差、大计数器优先选
int64_t或uint64_t - 涉及网络协议或二进制序列化的字段,必须用固定宽度类型(
int32_t/uint16_t等),否则结构体对齐和字节序都会出问题
记住:取值范围不是“够用就行”,而是“在所有目标平台上都确定不会越界”。一旦不确定,就别赌 int 的大小。










