int 標準僅保證 ≥ 16 位,**位寬隨平台/編譯器變化** (16/32/64 位均合法)。直接用 int 無法保證 32 位。
<stdint.h>)
#include <stdint.h>
#include <stdio.h>
int main() {
int32_t a = 2147483647; // 精確 32 位有符號
uint32_t b = 4294967295u; // 精確 32 位無符號
int_least32_t c = 100; // 至少 32 位 (通常同 int32_t)
int_fast32_t d = 200; // 最快 32 位 (某平台可能 64 位)
printf("int32_t: %d (0x%X)\n", a, a);
printf("sizeof(int32_t) = %zu\n", sizeof(int32_t)); // 必為 4
return 0;
}
| 類型 | 含義 | 典型大小 | 格式化宏 (C99) |
|---|---|---|---|
int32_t | 精確 32 位有符號 | 4 bytes | PRId32, PRIx32 |
uint32_t | 精確 32 位無符號 | 4 bytes | PRIu32, PRIx32 |
int_least32_t | ≥32 位最小類型 | ≥4 bytes | PRIdLEAST32 |
int_fast32_t | ≥32 位最快類型 | ≥4 bytes | PRIdFAST32 |
intptr_t | 能存指標的有符號整數 | 平台相關 | PRIdPTR |
stdint.h)
// 手動定義 (確認平台後)
#if defined(_MSC_VER) && _MSC_VER < 1600 // VS2010 前
typedef signed __int32 int32_t;
typedef unsigned __int32 uint32_t;
#else
// 現代編譯器均內建 stdint.h
#include
#endif
int32_t x = -12345678;
printf("x = %" PRId32 "\n", x); // 跨平台安全
// 或強制轉型 (僅知 32 位時)
printf("x = %ld\n", (long)x); // long 至少 32 位
int32_t/uint32_t** 表達「精確 32 位」語意。long (Windows 64 位為 4 字節、Linux 64 位為 8 字節)。htonl/ntohl)。