affectation bit à bit en c

  • Auteur de la discussion knaki02
  • Date de début

knaki02

Nouveau membre
Bien le bonjour,

Je souhaite un petit éclaircissement sur ces deux lignes, je comprend rien à la manipulation de bits :pt1cable: :

[cpp]
unsigned char * output_data;
int n;
...
if(...)
output_data[n >> 3] &= (0xFF7F >> (n & 0x7));
else
output_data[n >> 3] |= (0x80 >> (n & 0x7));
...
[/cpp]

Il s'agit de mettre des valeurs soit à 0 soit à 255. Cela fonctionne, mais je ne comprend pas pourquoi.

Merci d'avance pour votre aide.

Enjoy !

 

batchy

Grand Maître
c'est plus complèxe que ça.
l'expression générale
Code:
valeur |= 1<<X
permet de mettre le bit numero X à 1
ici on à
Code:
output_data[n >> 3] |= (0x80 >> (n & 0x7));
<=> output_data[n >> 3] |= ((1 << 7) >> (n & 0x7));
<=> output_data[n >> 3] |= 1<<(7- (n & 0x7));

l'expression générale
Code:
valeur &= ~ (1<<X);
permet de mettre le bit X à zéro
ici on à
Code:
output_data[n >> 3] &= (0xFF7F >> (n & 0x7));
<=> output_data[n >> 3] &= ((~0x80) >> (n & 0x7));
<=> output_data[n >> 3] &= (~(1<<7) >> (n & 0x7));
<=> output_data[n >> 3] &= ~(1<<(7-(n & 0x7)));
en fait ceux deux lignes utilisent un tableau de char comme une suite de bit, chaque bit ayant le numéro n, ces deux lignes activent ou désactivent le bit numéro n en fonction de la condition.
 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 845
Membres
1 586 373
Dernier membre
https://forum.tomshardwar
Partager cette page
Haut