代碼:
int x = foo(); // 有符號 int
unsigned ux = x; // 無符號複製
// 表達式 A: (x >= 0) || ((2*x) < 0)
題主誤以為 `ux` 無符號導致 `x` 也變無符號,**實際 `x` 仍是有符號 int**,`ux` 只是另一個無符號變量持有相同位模式。
| 變量 | 類型 | 值範圍 | 溢出行為 |
|---|---|---|---|
| `x` | `int` (有符號) | [-2³¹, 2³¹-1] | UB (未定義行為) |
| `ux` | `unsigned int` | [0, 2³²-1] | 定義良好:模 2³² 環繞 |
賦值 `unsigned ux = x;` 只是**位模式重新解讀** (補碼 → 無符號值),不改變 `x` 的類型與語義。