-
Utiliser Bit Set
Bonjour,
j'aimerai faire des opérations du style
1010 0000 ->160
1011 0000 ->176
J'ai donc au départ un byte. et je voudrais modifier un bit particulier (ici le 4ème). D'après ce que j'ai lu, je pourrai utiliser BitSet mais je ne comprends pas le fonctionnement :(
Je pense qu'il faut faire 8 fois set(valeur) avec la valeur correspondante d'un bit (exemple 128 puis 64 ....) et qu'ensuite il faut les associer a vrai ou faux, mais après je ne vois pas comment récupérer la valeur correspondante facilement (bon sinon il suffirait juste de faire des conditions mais je me demande si je ne peux pas tout récupérer simplement).
Peut etre que je me plante complètement sur le fonctionnement de cette classe ...
Merci pour vos réponses !
-
pour avoir un nombre 100000 avec donc uniquemement le nème bit à 1, il faut faire "1<<n", pour forcer ce bit dans un nombre, il suffit de faire
Code:
x=(1<<n)+(x & (!(1<<n)))
(beaucoup de parenthèses inutiles, mais c'est pour bien voir ce que ça fait)
-
Merci pour ta réponse,
j'ai du mal à comprendre :?
donc 1<<n force un bit dans un nombre, donc dans mon cas le 5ème,
ce qui revient à 1<<5,
mais que signifie "x & (!(1<<n))" ?
Je suppose que !1<<5 voudrait dire que ce bit est a 0,
mais a quoi sert le & ?
[EDIT] quel est le type de x ? c'ets un byte ?
-
Alors finalement ça marche, même si j'ai pas tout compris l'expression précédente.
Il m'a suffit de faire
x = x + 1<<4;
Merci beaucoup pour ton aide !
-
1<<n crée un nombre de la forme 0010000 avec le nième bit à 1, tous les autres à 0
!(1<<n) crée exactement le nombre inverse: 1101111
si x est ton nombre de départ, (x & (!(1<<n))) force le nème bit de x à 0 (nécessaire pour l'opération suivante)
ensuite, le +1<<n force le nième bit à 1 par addition. Dans ce cas on aurait aussi pu utiliser un | (or) pour être plus performant:
Code:
x=(1<<n)|(x & (!(1<<n)))
ou on aurait pu utiliser l'inversion préalable de x puis mettre le nième bit à 0 puis réinverse :)
Code:
x=!((!x) & (!(1<<n)))
et donc en fait je suis très con (et j'étais passablement fatigué) pour avoir tordu autant l'expression :D
pour activer le nième bit d'un nombre il suffit de faire
et pour désactiver le nième bit, il faut faire
voilà :)
-
Et bien, merci beaucoup pour ces explication :D