J'essaie de définir des bits dans la variable d'octet Java. Elle fournit des méthodes propper comme .setBit(i)
]. Quelqu'un sait-il comment je peux réaliser cela?
Je peux parcourir bit par bit un octet donné:
if( (my_byte & (1 << i)) == 0 ){
}
Cependant, je ne peux pas définir cette position sur 1 ou 0, puis-je?
Utilisez le bitwise [~ # ~] ou [~ # ~] (|
) et [~ # ~] et [~ # ~] (&
) les opérateurs. Pour définir un bit, c’est-à-dire tourner le bit à pos
en 1
:
my_byte = my_byte | (1 << pos); // longer version, or
my_byte |= 1 << bit; // shorthand
Pour dé-définir un bit, ou le tourner sur 0
:
my_byte = my_byte & ~(1 << pos); // longer version, or
my_byte &= ~(1 << bit); // shorthand
Pour des exemples, voir Opérateurs Java/Bitwise avancés
Pour définir un peu:
myByte |= 1 << bit;
Pour effacer:
myByte &= ~(1 << bit);
Juste pour compléter réponse de Jon et réponse de driis
Pour basculer (inverser) un peu
myByte ^= 1 << bit;
La technique dont vous avez besoin consiste à isoler le bit choisi et à le définir ou à le supprimer. Vous avez déjà l'expression pour isoler le bit puisque vous l'utilisez pour le tester ci-dessus. Vous pouvez définir le bit en effectuant une rotation OU, ou effacer le bit par bit AND avec le complément à 1 du bit.
boolean setBit;
my_byte = setBit
? myByte | (1 << i)
: myByte & ~(1 << i);
Veuillez voir la classe Java.util.BitSet qui fait le travail pour vous.
Pour définir: myByte.set(bit);
Pour réinitialiser: myByte.clear(bit);
Pour remplir avec un booléen: myByte.set(bit, b);
Pour obtenir un booléen: b = myByte.get(bit);
Obtenez le bitmap: byte bitMap = myByte.toByteArray()[0];