2016-04-12 155 views
0
bitshifting當

我試圖做一些二進制對象位與比較:不兼容的錯誤類型Java中

private int selectedButtons = 0x00; 

private static final int ABSENCE_BUTTON_SELECTED = 0x01; 
private static final int SICKNESS_BUTTON_SELECTED = 0x02; 
private static final int LATENESS_BUTTON_SELECTED = 0x04; 

這裏是比較:

boolean absenceButtonEnabled = selectedButtons & ABSENCE_BUTTON_SELECTED; 

但我得到這個錯誤:

Error:(167, 56) error: incompatible types 
required: boolean 
found: int 

任何想法?

+2

請考慮* Effective Java 2nd Ed的建議*第32項:「使用EnumSet而不是位域」。 –

回答

4

selectedButtons & ABSENCE_BUTTON_SELECTED是一個整數,因爲&binary or操作。

要將其轉換爲布爾使用:

boolean absenceButtonEnabled = (selectedButtons & ABSENCE_BUTTON_SELECTED) != 0; 
+0

巨大的幫助。有道理(就像其他職位一樣,但我相信這是第一次!)。謝謝。 – spogebob92

+0

檢查AND與0的值是否正常?我通常將它與我檢查的任何標誌進行比較。 –

+1

如果位標誌不相交(使用不同的位),則可以安全使用'!= 0'。這裏是ABSENCE_BUTTON_SELECTED只有一位,因此位標記必須是分離的。如果位標記重疊(即枚舉[1,2,3,4 ...]),那麼您必須與值本身進行比較。 – Rocki

2

它比較爲零:

boolean absenceButtonEnabled = selectedButtons & ABSENCE_BUTTON_SELECTED != 0; 
2

兩個int S中的返回類型爲int。嘗試下面的代碼。

boolean absenceButtonEnabled = (selectedButtons & ABSENCE_BUTTON_SELECTED) == ABSENCE_BUTTON_SELECTED