main() {
char x = 0xFFFF;
printf("%d\n", x--); // 輸出 -1
}
char 佔 1 字節(8 位),範圍 0~255(無符號)或 -128~127(有符號)0xFFFF 二進制為 16 個 1:1111 1111 1111 11111111 1111(十進制 255,十六進制 0xFF)%d 將內存按 有符號整數 解讀1111 1111 作為 8 位有符號數:最高位 1 表示負數0000 0000 + 1 = 0000 0001 → 數值 1x-- 先使用當前值參與表達式求值,再將 x 變為 -2(即 0xFE),故本次 printf 仍輸出 -1。
| 概念 | 說明 |
|---|---|
| char 寬度 | 1 byte = 8 bits |
| 0xFFFF 截斷 | 保留低 8 位 → 0xFF (255) |
| %d 解讀 | 按有符號補碼讀取 → -1 |
| 後置 -- | 先用後改,本次輸出不變 |
若需輸出 255,請使用 unsigned char 配合 %u 或 %hhu。