X = 1 + 2 * 5 - 8 + 6 / 7 * 4
*、/、%(同級,左結合)+、-(同級,左結合)=(右結合)1 + 2 * 5 - 8 + 6 / 7 * 4
→ 1 + (2 * 5) - 8 + (6 / 7) * 4 // 先算 * 和 /
→ 1 + 10 - 8 + 0 * 4 // 6/7 整除 = 0
→ 1 + 10 - 8 + 0 // 0*4 = 0
→ (1 + 10) - 8 + 0 // 左結合:先算左邊 +
→ 11 - 8 + 0
→ (11 - 8) + 0 // 左結合:先算左邊 -
→ 3 + 0
→ 3
選項 B: 1 + (2 * 5) - 8 + ((6 / 7) * 4)
*// 先於 +/-,同級左結合。| 選項 | 錯誤原因 |
|---|---|
A: (1 + 2) * (5 - 8) + (6 / (7 * 4)) | 強行綁定 + - 優先於 * /,違反優先級 |
C: (1 + 2) * (5 - ((8 + 6) / (7 * 4))) | 同 A,且結構完全錯位 |
D: 1 + (2 * (5 - 8)) + ((6 / 7) * 4) | 將 5-8 綁定到 2* 上,改變了原表達式結構 |
6 / 7 = 0 // 整數除法向零截斷,非 0.857...
// 若需浮點結果,至少一操作數為浮點:6.0 / 7 或 6 / 7.0
「先乘除後加減,同級從左往右;括號明確優先級,整除截斷記心頭。」
運算符優先級與結合性是編譯器解析表達式的鐵律,手寫括號化時嚴守「高優先級先結合、同級看結合方向」,即可無誤。