[cpp]
if (indicator & 0x8000 == 0x8000) { ... }
意圖:判斷 indicator 的第 16 位(0x8000)是否為 1。
實際:== 優先級高於 &,等價於 indicator & (0x8000 == 0x8000) → indicator & 1,判斷變成了最低位!
== != > < >= <=)優先級 高於 位運算符(& ^ |)。() [] -> . → ! ~ ++ -- → * / % → + - → << >> → < <= > >= → == != → & → ^ → | → && → || → ?: → = += ...永遠加括號,消除歧義:
[cpp]
if ((indicator & 0x8000) == 0x8000) { ... }
task.cur = indicator & 0x7fff; 中,0x7fff 為 int,indicator 為 int,無類型提升問題,按位與後高 16 位自動清零,邏輯正確。
「對於不確定性問題,要想辦法去確認,否則等待你的將會是 Bug。」