Définition d'un bit spécifique dans l'octet


65

J'essaie de définir des bits dans une variable Java byte. Il fournit des méthodes propper comme .setBit(i). Est-ce que quelqu'un sait comment je peux réaliser cela?

J'itérer peu sage à travers un octet donné:

if((my_byte & (1 << i)) == 0){ 

} 

Cependant je ne peux pas mettre cette position à 1 ou 0, puis-je?

109

Utilisez les or et and bitwise opérateurs. Pour définir un bit:

my_byte = my_byte | (1 << pos); 

Pour un-set un peu:

my_byte = my_byte & ~(1 << pos); 
+3

voir aussi l'opérateur xor - c'est le troisième outil de puissance dans cet arsenal (voir l'article de Wikipedia sur le masquage). 29 mars. 122012-03-29 17:35:58


59

Pour définir un bit:

myByte |= 1 << bit; 

Pour effacer:

myByte &= ~(1 << bit); 
  0

qu'entendez-vous cela "set" un peu? dites que vous essayiez d'accéder au 0ème bit, et myByte contient 11101101. Qu'est-ce que cela signifie? Comment contrôler la valeur définie? 06 mars. 162016-03-06 05:08:40

+3

@Michael: Définir un bit signifie le faire 1. Effacer un bit signifie le faire 0. 06 mars. 162016-03-06 08:50:00


10

La technique dont vous avez besoin est d'isoler le bit choisi et soit définir ou effacer. 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 y insérant OU en effaçant le bit au niveau du bit ET avec le complément 1 du bit.

boolean setBit; 
my_byte = setBit 
      ? myByte | (1 << i) 
      : myByte & ~(1 << i); 

19

Juste pour compléter Jon‘s answer et driis‘ answer

Pour basculer (inverti) un peu

myByte ^= 1 << bit; 
  0

Ceci est plus propre que deux opérations distinctes ... 17 mars. 152015-03-17 16:46:14

+1

@ernesto mais il ne répond pas spécifiquement à la question. Il a demandé comment régler le bit, ne pas le basculer. Il existe une différence. Bien sûr, vous pouvez d'abord vérifier le bit, puis le basculer si nécessaire, mais ce sera aussi 2 tâches distinctes ... 27 mai. 162016-05-27 22:50:06


6

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 un bool: myByte.set(bit, b); Pour obtenir le bool: b = myByte.get(bit); Obtenez le bitmap: byte bitMap = myByte.toByteArray()[0];

+2

Attention avec bitset. Il n'y a pas de distinction entre mettre un bit à 0 et l'effacer, ainsi 'longueur()' ne compterait pas les bits mis à 0 13 oct.. 152015-10-13 09:28:31