Bonjour, je viens de lire cet article sur les opérations binaires et j'ai une remarque concernant cette fonction "set":
Via cette fonction on devrait donc pouvoir mettre à 0 le bit d'index b.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public void set(int b, boolean value) { if (value) attributes |= (1 << b); else attributes &= (0 << b); }
Et les autres ? Ils sont mit à 0 également.
En effet, un ET logique va être fait entre notre suite binaire et une suite de 0.
Exemple : on veut mettre à 1 le bit d'index 7 et plus tard dans le code nous voulons mettre à 0 le bit d'index 3 SANS modifier les autres bits.
C'est donc impossible : on fait une remise à 0 de tous les bits.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 attributes |= (1 << 7); // set(7, true); // .... attributes &= (0 << 3); // set(3, false); System.out.println(attributes); // affiche 0
Pour éviter cela, il faut changer la ligne "attributes &= (0 << b);" par "attributes &= ~(1 << b);".
Cela aura pour effet de nous donner une suite de 1 sauf pour le bit d'index donné où on aura un 0. Ainsi, en fesant notre ET logique on ne modifie pas les autres bits.
Voila, j'en profite pour remercier Romain Guy pour tous ces tutos très utiles !
Partager