在 C/C++ 中,基本整型(int、long 等)的長度取決於編譯器和 CPU 架構。例如 16 位 DOS 下 sizeof(int)==2,32 位 Windows 下 sizeof(int)==4。為了編寫可移植代碼,C99 標準引入了 <stdint.h> 頭文件,定義了固定寬度整數類型。
當你需要確保整數佔用確切的位數時使用:
int8_t int16_t int32_t int64_t
uint8_t uint16_t uint32_t uint64_t
標準保證至少提供 8、16、32、64 位類型,但不保證所有平台都有精確寬度類型。除非確實無法接受更大類型,否則優先考慮「最小寬度」或「最快」類型。
至少具有指定位數,可能更大:
int_least8_t int_least16_t int_least32_t int_least64_t
uint_least8_t uint_least16_t uint_least32_t uint_least64_t
在滿足最小位數前提下,運行速度最快的類型:
int_fast8_t int_fast16_t int_fast32_t int_fast64_t
uint_fast8_t uint_fast16_t uint_fast32_t uint_fast64_t
適用場景: 如循環計數器需至少 16 位且追求極致性能,使用 int_fast16_t 可確保編譯器選擇當前 CPU 最優的 ≥16 位類型。
#include <inttypes.h>
for (int_fast16_t n = 0; n < 30000; ++n) {
// do something
}
intptr_t / uintptr_t:足以容納指針的整數類型(非所有平台支持,但主流 Linux/BSD 均支持)。intmax_t / uintmax_t:平台支持的最大寬度整數類型。int8_t; uint8_t;
int16_t; uint16_t;
int32_t; uint32_t;
int64_t; uint64_t;
int_least8_t; uint_least8_t;
int_least16_t; uint_least16_t;
int_least32_t; uint_least32_t;
int_least64_t; uint_least64_t;
int_fast8_t; uint_fast8_t;
int_fast16_t; uint_fast16_t;
int_fast32_t; uint_fast32_t;
int_fast64_t; uint_fast64_t;
intptr_t; uintptr_t;
intmax_t; uintmax_t;
Boost 提供 <boost/cstdint.hpp> 封裝了 C99 <stdint.h>,可直接在 C++ 中使用上述類型,無需擔心編譯器兼容性。