首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 中跨平台整數類型:stdint.h 與 inttypes.h 詳解

     編輯:關於C++

整型長度與平台無關的解決方案

在 C/C++ 中,基本整型(int、long 等)的長度取決於編譯器和 CPU 架構。例如 16 位 DOS 下 sizeof(int)==2,32 位 Windows 下 sizeof(int)==4。為了編寫可移植代碼,C99 標準引入了 <stdint.h> 頭文件,定義了固定寬度整數類型。

1. 精確寬度整數類型

當你需要確保整數佔用確切的位數時使用:

int8_t   int16_t   int32_t   int64_t
uint8_t  uint16_t  uint32_t  uint64_t

標準保證至少提供 8、16、32、64 位類型,但不保證所有平台都有精確寬度類型。除非確實無法接受更大類型,否則優先考慮「最小寬度」或「最快」類型。

2. 最小寬度整數類型

至少具有指定位數,可能更大:

int_least8_t   int_least16_t   int_least32_t   int_least64_t
uint_least8_t  uint_least16_t  uint_least32_t  uint_least64_t

3. 最快最小寬度整數類型

在滿足最小位數前提下,運行速度最快的類型:

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
}

4. 其他實用類型

  • intptr_t / uintptr_t:足以容納指針的整數類型(非所有平台支持,但主流 Linux/BSD 均支持)。
  • intmax_t / uintmax_t:平台支持的最大寬度整數類型。

5. 完整類型列表

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;

6. Boost 使用者的便利

Boost 提供 <boost/cstdint.hpp> 封裝了 C99 <stdint.h>,可直接在 C++ 中使用上述類型,無需擔心編譯器兼容性。


  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved