web-dev-qa-db-fra.com

Définir un bit spécifique en octet

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?

76
wishi

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

130
driis

Pour définir un peu:

myByte |= 1 << bit;

Pour effacer:

myByte &= ~(1 << bit);
65
Jon Skeet

Juste pour compléter réponse de Jon et réponse de driis

Pour basculer (inverser) un peu

    myByte ^= 1 << bit;
23
Carlos Heuberger

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);
10
Jeffrey Hantin

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];

7
sebyku