Ich versuche, Bits in Java-Byte-Variablen zu setzen. Es bietet geeignete Methoden wie .setBit(i)
. Weiß jemand, wie ich das realisieren kann?
Ich kann bitweise durch ein bestimmtes Byte iterieren:
if( (my_byte & (1 << i)) == 0 ){
}
Ich kann diese Position jedoch nicht auf 1 oder 0 setzen, oder?
java
byte
bit-manipulation
Wishi
quelle
quelle
Antworten:
Verwenden Sie die bitweisen Operatoren OR (
|
) und AND (&
). So stellen Sie ein wenig, nämlich drehen das Bit an ,pos
um1
:my_byte = my_byte | (1 << pos); // longer version, or my_byte |= 1 << pos; // shorthand
So setzen Sie ein wenig ab oder wenden sich an
0
:my_byte = my_byte & ~(1 << pos); // longer version, or my_byte &= ~(1 << pos); // shorthand
Beispiele finden Sie unter Erweiterte Java / Bitweise Operatoren
quelle
Um ein bisschen zu setzen:
myByte |= 1 << bit;
Um es zu klären:
myByte &= ~(1 << bit);
quelle
Nur um Jons Antwort und Driis 'Antwort zu ergänzen
Umschalten (invertieren)
myByte ^= 1 << bit;
quelle
Die Technik, die Sie benötigen, besteht darin, das ausgewählte Bit zu isolieren und es entweder zu setzen oder zu löschen. Sie haben bereits den Ausdruck, um das Bit zu isolieren, da Sie es oben zum Testen verwenden. Sie können das Bit durch ODER-Verknüpfung setzen oder das Bit durch bitweises UND mit dem 1-Komplement des Bits löschen.
boolean setBit; my_byte = setBit ? myByte | (1 << i) : myByte & ~(1 << i);
quelle
Bitte sehen Sie sich die Klasse java.util.BitSet an, die die Arbeit für Sie erledigt.
Zum Set:
myByte.set(bit);
zurück:myByte.clear(bit);
Um mit einem Bool zu füllen:myByte.set(bit, b);
das Bool zu erhalten:b = myByte.get(bit);
Holen Sie sich das Bitmap:byte bitMap = myByte.toByteArray()[0];
quelle
length()
würden die auf 0 gesetzten Bits nicht gezählt