c語言中的符號優先級問題

大部分運算符都有優先級的先後問題 據一些例子

 1>  if(flags & FLAGS)        //其中flags 與 FLAGS 都是變量,想用來判斷flags 與 FLAGS 在二進制上同位是否有同1,也就是存在相同二進制位上的指數是否相同且爲1,對於電腦來說自然而然地認爲if(flags & FLAGS != 0)爲真,但是當運行時,因爲運算符優先級的問題,電腦認成if(flags & (FALGS != 0)),這就造成了歧義,故應該改寫爲if((flags & FLAGS) != 0) 即可滿足要求。
 2>  如果有 high 和 low 兩個整形變量的值介於 0 到 15 之間,如果整形變量r的低四位與low一致,高四位與high一致,則r可表示爲r = high << 4 + low;但因爲優先級問題,電腦將自動識別爲 r = high << (4 + low) ,這樣就產生了歧義。
    這裏有兩種方法可以改正
       a>    r = (high << 4) + low;            //加括號
       b>    r = high << 4 | low;             //將原來的加號改爲按位邏輯或

對於運算符的問題上還有很多的問題,一方面我們可以記住這些運算符的優先級,當然這是比較難得,最好用的方法就是加括號,保證想要優先進行的運算能夠順利先一步運算。這是需要注意的一些方面

發佈了31 篇原創文章 · 獲贊 3 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章