整型是 C 語言最基礎、最高效的數據類型。本文系統梳理整型分類(基本/短/長/無符號)、內存存儲(補碼機制)、三種進制書寫規則、後綴用法、溢出行為及混合類型運算中的自動轉換,配合圖解與實測代碼,構建完整整型知識體系。
| 類型關鍵字 | 別名 | 典型佔用 | 有符號範圍 (16/32 位系統差異大) | 無符號範圍 |
|---|---|---|---|---|
int | 基本整型 | 2/4 字節 | -32768~32767 / -2147483648~2147483647 | 0~65535 / 0~4294967295 |
short / short int | 短整型 | 2 字節 | -32768~32767 | 0~65535 |
long / long int | 長整型 | 4/8 字節 | -2147483648~2147483647 / 更大 | 0~4294967295 / 更大 |
unsigned / unsigned int | 無符號基本型 | 同 int | — | 同 int 無符號範圍 |
unsigned short | 無符號短整型 | 2 字節 | — | 0~65535 |
unsigned long | 無符號長整型 | 4/8 字節 | — | 同 long 無符號範圍 |
注意:C 標準僅規定 short ≤ int ≤ long,**具體字節數視實現而定**。現代 64 位 Linux/Windows 常見 int=4、long=4/8、long long=8。<limits.h> 定義 INT_MAX 等宏供可移植查詢。
-10 (16 位) → 10000000 00001010 (原碼) → 11111111 11110101 (取反) → 11111111 11110110 (+1) = 0xFFF6。| 進制 | 前綴 | 合法數碼 | 示例 (十進制值) | 非法示例 |
|---|---|---|---|---|
| 十進制 | 無 | 0-9 | 237 -568 65535 | 023 (不可前導 0)、23D |
| 八進制 | 0 | 0-7 | 015(13) 0177777(65535) | 256 (無前綴)、03A2、-0127 (不可負號) |
| 十六進制 | 0x/0X | 0-9, A-F/a-f | 0x2A(42) 0xFFFF(65535) | 5A (無前綴)、0x3H |
後綴:L/l → long;U/u → unsigned;可組合 0xA5Lu (無符號長十六進制)。
2^N 環繞(UINT_MAX + 1 = 0)。INT_MAX + 1 = INT_MIN),但**不可依賴**。// TC2.0 (16 位 int) // VC6.0 (32 位 int)
int a = 32767; int a = 32767;
int b = a + 1; // b = -32768 int b = a + 1; // b = 32768 (無溢出)
// 改為 a = 2147483647 才會在 VC6.0 見到溢出
long x = 5, y = 6;
int a = 7, b = 8;
int c = x + a; // long + int → long 運算,結果 long → int 賦值 (截斷風險)
int d = y + b; // 同理
int 作為通用整數;需明確範圍時用 int32_t/uint32_t 等 (<stdint.h>)。3000000000u、0x100000000ULL。-Wconversion -Wsign-conversion -Woverflow 捕獲隱式窄化/溢出。