2016-07-27 15 views
0

Ich habe eine lange und ich möchte überprüfen, ob ein Bit an einer bestimmten Position eingestellt ist oder nicht.Java: Überprüfen, ob ein bestimmtes Bit in einem langen

Angenommen, die lange A

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0001 0010 0100 0100 

So wird das Bit bei 3, 7, 10, 13 Positionen eingestellt sind.

Jetzt habe ich lange eine andere B

0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0010 0000 0000 

und in dieser langen Bit-Position 10 gesetzt ist. (Es ist sichergestellt, dass nur ein Bit wird in Sekunden lang eingestellt werden)

nun von oben zwei Long-Positionen zu vergleichen A und B ich feststellen möchten, ob die Position 10 Bit in A lang gesetzt ist oder nicht.

Eine Lösung ist

  1. prüfe ich zuerst in B lange Bit die Position gesetzt wird können sagen, diese Position p ist. Dies beinhaltet ein Schleifen über jedes Bit, um zu prüfen, ob dieses Bit gesetzt ist.

  2. Jetzt in A lange kann ich überprüfen, ob p Bit gesetzt ist oder nicht

Meine Frage ist es eine andere Lösung, weil ich über jedes Bit in einer Schleife nicht wollen, und ich don‘ t wissen, welche Position welches Bit vorher prüfen soll.

EDIT: Ich hatte einen Blick auf Java: Checking if a bit is 0 or 1 in a long und in dieser Frage x vorher bekannt ist, aber ich weiß nicht, die Position vorher.

+0

@Danieboy Es ist kein Duplikat, in dieser Frage ist 'x' bekannt. – Ritesh

Antwort

1

Um zu überprüfen, ob ein bestimmtes Bit gesetzt ist, verwenden Sie den Operator & mit der Maske, die dieses Bit darstellt.

Zum Beispiel:

long vectorValue = 985739487549L; 
    long bitMask = 32L; 

    boolean hasBit = false; 
    int vectorMaskedValue = vectorValue & bitMask; 
    if (vectorMaskedValue == bitMask) 
    { 
     hasbit = true; 
    } 
1

Wenn Sie, wenn die (nur) wissen wollen, 1 Bit B auch in A gesetzt ist Sie müssen nur bitweise und die beiden:

if (A & B != 0) { 

} 

Da B nur ein einzelnes 1 Bit hat, wird A & B nur dann ungleich Null sein, wenn das gleiche Bit 1 in A ist.

+0

Ich denke du brauchst '! =', Was mit dem Vorzeichenbit. – chrylis

+0

@chrylis guter Punkt – Eran

Verwandte Themen