2016-04-12 5 views
0

Ich versuche, eine bitweise UND-Komparator auf einige binäre Objekte zu tun:Inkompatible Typ Fehler, wenn in Java bitshifting

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; 

Hier den Komparator:

boolean absenceButtonEnabled = selectedButtons & ABSENCE_BUTTON_SELECTED; 

Aber ich bin immer diese Fehler:

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

Irgendwelche Ideen?

+2

Betrachten Sie den Ratschlag von * Effective Java 2nd Ed * Artikel 32: "Verwenden Sie EnumSet anstelle von Bitfeldern". –

Antwort

4

selectedButtons & ABSENCE_BUTTON_SELECTED eine ganze Zahl ist, weil & der binary or Operator ist.

Um es zu boolean Verwendung zu konvertieren:

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

Große Hilfe. Macht Sinn (wie auch die anderen Beiträge, aber ich glaube, das war zuerst!). Vielen Dank. – spogebob92

+0

Ist es üblich, den UND-Wert gegen 0 zu prüfen? Ich vergleiche es normalerweise mit der Flagge, nach der ich gesucht habe. –

+1

Wenn die Bitflags disjunkt sind (verschiedene Bits verwenden), ist es sicher, '! = 0' zu verwenden. Hier ist ABSENCE_BUTTON_SELECTED nur ein Bit, daher müssen die Bitflags disjunkt sein. Wenn sich die Bitflags überlappen (d. H. Eine enum [1, 2, 3, 4 ...]), müssen Sie mit dem Wert selbst vergleichen. – Rocki

2

Vergleichen Sie es auf Null:

boolean absenceButtonEnabled = selectedButtons & ABSENCE_BUTTON_SELECTED != 0; 
2

Der Rückgabetyp von zwei int s int ist. Probieren Sie den folgenden Code aus.

boolean absenceButtonEnabled = (selectedButtons & ABSENCE_BUTTON_SELECTED) == ABSENCE_BUTTON_SELECTED 
Verwandte Themen