運算子的優先順序

一般我們在撰寫程式時常常會用到運算子,比如"="、"AND"、"ANDALSO"等等;有時候不小心常常會在這部分發生一些錯誤,所以不知道是不行的,比如今天撰寫程式時就發生一個錯誤,像下面這樣

If MyByteArray(8) And &HF = 0 Then
...
Else
...
End If

這段是把我接收到的byte陣列中的一個抓出來,然後取低位元組來用(也就是bit0~bit3),判斷是不是0,是的話要做特殊的處理,結果執行時發現永遠不會成立,為什麼呢?查了MSDN之後原來"="運算子的優先權高於AND運算子,所以會先處理
&HF = 0

的部分結果當然是傳回0,之後是
MyByteArray(8) And 0

結果也會是0,再來就輪到IF了,IF 0會判定為False,所以我程式的動作就會異常了..T.T
解決的方式是

If (MyByteArray(8) And &HF) = 0 Then
...
Else
...
End If

所以還是要養成好習慣,該有括號的地方不要偷懶啊..

相關參考
Visual Basic 中的運算子優先順序

留言

這個網誌中的熱門文章

開啟cshtml檔案時,出現『並未將物件參考設定為物件執行個體』的錯誤訊息

無法設定中斷點 尚未載入符號檔

Windows 10年度更新後,IIS 網站出現 503 錯誤