Bonjour,
Soit un nombre, par exemple un octet.
Je souhaite pouvoir affecter (mettre à 0 ou 1) seulement le bit "n", sans toucher à la valeur des autres bits.
Comment faire ?
Bonjour,
Soit un nombre, par exemple un octet.
Je souhaite pouvoir affecter (mettre à 0 ou 1) seulement le bit "n", sans toucher à la valeur des autres bits.
Comment faire ?
Tu fais un masque:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char cOctet = 0xFF; cOctet = cOctet & 0xF7; // pour changer le 3e bit à 0
Et pour forcer à zéro un bit :
Mais bon, tout ceci est plus facile avec une structure appropriée, par exemple std::bitset ou boost.dynamic_bitset.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 char val; val = val & ~(1 << n);
Mieux que SDL : découvrez SFML
Mes tutoriels 2D/3D/Jeux/C++, Cours et tutoriels C++, FAQ C++, Forum C++.
en fait, il faut distinguer la mise à 1 de la mise à 0 :
mise à 1 :
mise à 0 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part Value |= 1<<Position;
Code : Sélectionner tout - Visualiser dans une fenêtre à part Value &= ~(1<<Position);
Bien mieux que cela...
Il "suffit" de prendre les tables de vérité des différents opérateurs binaires en compte
A partir de là, le reste "tourne" tout seul
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 a b a|b a&b a^b 0 0 0 0 0 0 1 1 0 1 1 0 1 0 1 1 1 1 1 0 ^ ^ ^ | | ou exclusif | | ET binaire |OU binaire![]()
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Merci de la réponse, mais je ne vois pas où tu veux en venir...
Salut,
"Tout simplement" en utilisant les opérateur bits à bits
Si tu es sur qu'il faut passer la valeur du bit de 0 à un tu peux utiliser un code du genre de
Si tu veux changer inconditionnellement l'état d'un bit en son contraire (passer de 1 à 0 OU passer de 0 à 1), c'est le ou exclusif qu'il faut utiliser
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 /*soit n étant le numéro du bit à changer */ char val; val=val | (1<<n);
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 char val; val = val ^ (1<<n);/* si b(n)=0 -->b(n) devient 1 * si b(n)=1 -->b(n) devient 0 */
A méditer: La solution la plus simple est toujours la moins compliquée
Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
Compiler Gcc sous windows avec MinGW
Coder efficacement en C++ : dans les bacs le 17 février 2014
mon tout nouveau blog
Partager