Bonjour, je viens de lire cet article sur les opérations binaires et j'ai une remarque concernant cette fonction "set":
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);
}
Via cette fonction on devrait donc pouvoir mettre à 0 le bit d'index 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.

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
C'est donc impossible : on fait une remise à 0 de tous les bits.

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 !