2016-03-21 60 views
4

在我之前關於如何組合比特包含特定比特的問題上,我遇到了這個錯誤。運算符「&」不能應用於byte,int,boolean

int flag1 = 1 << 0; 
    int flag4 = 1 << 5; 

    int combined = flag1 | flag4; 

    if (combined & flag1 == flag1) // <-- Operator & cannot be applied to int, boolean 

如果我投的標誌以字節錯誤替換intbyte

+0

哦,又一個Java的運算符優先級的問題......這的確是令人困惑我也! (當然它還是比PHP更好?:':P) – minmaxavg

回答

9

編譯器看到的二進制運算&if聲明,將其視爲邏輯AND(因爲它期望返回boolean一個表達式),並檢查參數類型。

它遇到一個int變元 - combined - 和一個boolean變元 - flag1 == flag1。由於它預計有兩個boolean參數(&運算符不能應用於intboolean),因此會出現錯誤。

爲了添加括號期望的順序進行評估運營商:

if ((combined & flag1) == flag1) 
+0

謝謝,大聲笑我試圖編輯你的帖子,因爲我編輯了我的問題。但是在你更新之後)。 「AOE」應該是「flag1」或「flag4」。在我以前的問題中,每個人都給我沒有括號的答案,我想知道爲什麼... – Madmenyo

+0

@MennoGouw是的,我注意到你的編輯並將其添加到答案。 – Eran

+0

感謝您解釋得非常好的答案。我是比較和操作的新手,但現在我明白了。 – Madmenyo

相關問題