Comment retourner un bit spécifique dans un octet en C?
Je suis en train d'utiliser des masques et de manipuler les bits dans un octet.
Par exemple:
Je veux écrire un programme en C qui retourne deux bits à des positions particulières par exemple le bit à la position 0 et celle à la troisième position.
Donc, 11100011
, deviendrait 01110011
.
Comment puis-je échanger ces bits?
source d'informationauteur Niels Robben
Vous devez vous connecter pour publier un commentaire.
En feuilletant un peu est fait par XOR-ing avec un masque: définir les bits, les positions que vous souhaitez retourner, puis exécuter un XOR, comme ceci:
Voici quelques remarques:
1 << n
oùn
est le numéro de position en comptant à partir du bit le moins significatif.|
de l'opérateur. Par exemple,(1 << 4) | (1 << 7)
construit le masque pour retourner les bits 4 et 7.Si votre octet est x et que vous souhaitez changer de bits à la i-ème et j-ème position:
Donc, dans votre cas, il serait juste (1<<4) | (1<<7). 🙂
Tout d'abord, bonne chance!
Une remarque - il est plus utile de compter les bits de droite et pas de gauche, comme il y a plusieurs octet/mot tailles (8 bits,16 bits,etc.) et que le comte préserve la compatibilité de mieux. Si dans votre cas, vous faites référence à des bits #7 et #4 (zéro).
Vouliez-vous dire "flip" (changement de 0<->1 bits) ou "switch" entre l'un et l'autre?
Pour la première option, la réponse ci-dessus (XOR avec "int mask = 0x90; //10010000") est très bonne. Pour la seconde, c'est un peu plus compliqué (mais pas beaucoup).
De flip bits, vous pouvez utiliser le OU exclusif bit à bit de l'opérateur. Cela prend deux opérandes (en général, la valeur que vous souhaitez utiliser et le masque de la définition de ce que les bits sera retourné). Le OU-exclusif (XOR) opérateur ne flip un peu si, et seulement si, l'un des deux est à 1, mais PAS les deux. Voir le (simple) de l'exemple ci-dessous: