最近在寫一段程式碼,剛好有去注意它編譯出來的assembly code,發現怎麼沒有預期出來的結果。結果發現卻是運算子優先順序的問題。切記位元運算的優先權為 shift > and > xor > or,之前一直以為三者是一樣大,原來卻不是如此。希望以前寫的產品不要因為如此而出問題啊,阿彌陀佛,善哉善哉。
原始錯誤程式碼運算子優先順序
優先 順序 | 評估順序 | 運算子 | 說明 |
15 | 由左至右 | ., [], () | 欄位存取、陣列索引、函式呼叫和運算式群組 |
14 | 由右至左 | ++, --, -, ~, !, delete, new, typeof, void | 一元運算子、傳回資料型別、物件建立、未定義的值 |
13 | 由左至右 | *, /, % | 乘法、除法、modulo 除法 |
12 | 由左至右 | +, - | 加法和字串串連、減法 |
11 | 由左至右 | <<, >>, >>> | 位元移位 |
10 | 由左至右 | <, <=, >, >=, instanceof | 小於、小於或等於、大於、大於或等於、instanceof |
9 | 由左至右 | ==, !=, ===, !== | 等號比較、不等比較、嚴格等號比較和嚴格不等比較 |
8 | 由左至右 | & | 位元 AND |
7 | 由左至右 | ^ | 位元 XOR |
6 | 由左至右 | | | 位元 OR |
5 | 由左至右 | && | 邏輯 AND |
4 | 由左至右 | || | 邏輯 OR |
3 | 由右至左 | ?: | 條件式 |
2 | 由右至左 | =, OP= | 指派、複合指派 |
1 | 由左至右 | , (逗號) | 多重評估 |
張貼留言