標準類型尺寸(32/64 位常見值)
| 類型 | 位數 | 有符號範圍 | 無符號範圍 | 格式符 |
| char | 8 | -128 ~ 127 | 0 ~ 255 | %c / %hhd |
| short | 16 | -32,768 ~ 32,767 | 0 ~ 65,535 | %hd / %hu |
| int | 16/32 | -2^15 ~ 2^15-1 / -2^31 ~ 2^31-1 | 0 ~ 2^16-1 / 0 ~ 2^32-1 | %d / %u |
| long | 32/64 | 同 int / -2^63 ~ 2^63-1 | 同 unsigned / 0 ~ 2^64-1 | %ld / %lu |
| long long | 64 | -9.22e18 ~ 9.22e18 | 0 ~ 1.84e19 | %lld / %llu (GCC) / %I64d (MSVC) |
| float | 32 | ±3.4e38 (7 位精度) | — | %f / %e / %g |
| double | 64 | ±1.7e308 (15 位精度) | — | %lf / %le / %lg |
| long double | 80/96/128 | 實現相關,通常同 double | — | %Lf / %Le / %Lg |
關鍵差異點
char 是否有符號:實現定義,涉及字符處理請顯式用 signed char/unsigned char
int 位寬隨編譯器目標架構:16 位機為 2 字節,32/64 位機為 4 字節
long long 格式符跨平台差異大:GCC 用 %lld,MSVC 用 %I64d,MinGW 編譯期認 %lld 運行期需 %I64d
float 參數傳遞自動擴展為 double,printf 用 %f 統一處理
Dev-C++ (MinGW) 實測對照表
/* 輸出示例 */
sizeof(char) = 1
sizeof(short) = 2
sizeof(int) = 4
sizeof(long) = 4
sizeof(long long) = 8
sizeof(float) = 4
sizeof(double) = 8
sizeof(long double) = 12 // 80-bit extended, 存儲對齊到 16 字節
工程建議
- 定長需求用
<stdint.h>:int32_t、uint64_t 等
2. 結構體對齊注意 #pragma pack 或 __attribute__((packed))
3. 跨平台序列化/網絡協議禁止直接傳遞基本類型,必須定義線制格式