Ich habe einen Wert DB von 3 Bytes (DB_1, DB_2, DB_3).
Ich muss DB_3 nach bestimmten Bits überprüfen. Zum Beispiel muss ich sehen, ob
%Code%
Wo nur die Bits 4, 6 und 7 überprüft werden sollen. Bits, die als DB_3 == 11X0XXXX
markiert sind, können einen beliebigen Wert annehmen und sollten nicht überprüft werden. Ich bin mit Bit-Operationen in Java nicht vertraut und freue mich über jede Hilfe!
Danke!
Sie können ein bitweises AND ( &
in Java) verwenden, um die Maskierung auf bestimmte Bits durchzuführen (die Maske ist die zweite Zeile und lässt nur die Bits der ersten Zeile durch, in denen die Maske ein 1
[%] hat. markiert mit Pfeilen unter der Berechnung]):
Sie behalten genau die Bits bei, die 1
in beiden Operanden waren, also setzen Sie im Wesentlichen alle diese Bits auf 0
, an denen Sie nicht interessiert sind.
Sie müssen also nur
machen %Vor% 0xD0
ist die hexadezimale Form von 208
, die in binary 11010000
ist, und Sie möchten wissen, ob sie 0xC0
entspricht, also 192
oder 11000000
. Sie werden wissen, dass all die Bits, die Sie nicht interessieren (die X
es in Ihrer Frage), zu diesem Zeitpunkt bereits Null sind, aufgrund der bitweisen AND.
ETA (2011-12-14 14:24): Anscheinend hat Java 7 binary Ganzzahlliterale , damit Sie
tun können %Vor%was die Maske leichter sichtbar macht. Danke, Glenn .
Sie müssen Masken verwenden. Sie machen eine Bitoperation mit dem Wert und der Maske.
Das Ergebnis enthält nur das Bit, wenn es in den Wert gesetzt wurde.
Während Joey's Methode gut funktioniert, gibt es hier eine andere Möglichkeit, die ich persönlich für intuitiver halte.
Sie benötigen zwei Masken: MASK1 = 11000000
, die definiert, wie DB_3
aussehen soll, und MASK2 = 11010000
, die definiert, welche Bits berücksichtigt werden sollen. 1
Bits in MASK2
zeigen Bits an, die uns wichtig sind und 0
Bits zeigen Bits an, die uns nicht interessieren.
Führe ein XOR mit MASK1
aus und invertiere das, dann ein AND mit MASK2
und überprüfe, ob das Ergebnis gleich MASK2
ist. Bei den ersten beiden Operationen wird 1
s gesetzt, wobei DB_3
und MASK1
übereinstimmen. Die dritte Operation löscht alle Ziffern im Ergebnis in 0
mit Ausnahme der Bits, die durch 1
s in MASK2
angezeigt werden. Der Vergleich wird nur dann als true
ausgewertet, wenn DB_3
mit MASK1
an den Positionen übereinstimmt, die in 1
s in MASK2
angegeben sind.
Beispiel für die bitweisen Operationen:
%Vor%Ich hoffe, das war verständlich.
Tags und Links java bit-manipulation