Bonsoir a tous,
voila, pour lire 1, 2 ou n bits dans une valeur DWORD, j'utilise le code suivant:
DWORD A=0xF6000000;
int i;
i=((A >> 24) & 0xF);
Mais si je veux ecrire dans certains bits, comment faut-il operer?
Merci d'avance...
Bonsoir a tous,
voila, pour lire 1, 2 ou n bits dans une valeur DWORD, j'utilise le code suivant:
DWORD A=0xF6000000;
int i;
i=((A >> 24) & 0xF);
Mais si je veux ecrire dans certains bits, comment faut-il operer?
Merci d'avance...
Mettre à 1 le bit 3 :Envoyé par Arthur59
mettre à 0 le bit 4 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part A |= (1UL << 3);
Ca ne sort pas ex-nihilo. Il faut connaitre l'algèbre booléenne et lire son livre de C a la rubrique opérateurs bit à bit (bitwise operators)
Code : Sélectionner tout - Visualiser dans une fenêtre à part A &= ~(1UL << 4);
K&R2 : Chapitre 2.9, page 48.
Merci pour cette reponse,
mais si je veux ecrire la valeur d'un int dans un nombre de bit donne,
par exemple j'ai une valeur DWORD B,dans laquelle je veux ecrire
la valeur de mon entier x (16 valeur possible) a partir du bit 4 jusqu'au bit 7?
j'ai bien essaye ceci, mais ca ne marche pas:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 DWORD B=0x00000000; int x; x=5; B |= (4 << x) & 0xF;
Déjà, quand on manipule des bits, on utilise exclusivement des variables non signées. Pas de int, mais unsigned[ int].Envoyé par Arthur59
Ensuite, on commence par faire le ménage : on efface les 4 bits à partir de la position 4 :
puis, on positionne les bits qui doivent être à 1 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part B &= ~(0xF << 4);
Nota. Pour générer un masque à partir de la largeur, c'est facile, c'est
Code : Sélectionner tout - Visualiser dans une fenêtre à part B |= (x << 4);
En effet :
Code : Sélectionner tout - Visualiser dans une fenêtre à part masque = (1 << largeur) - 1;
Ceci peut aider :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 1 << 4 = 0x10 (10000b) 0x10 - 1 = 0xF (01111b)
http://emmanuel-delahaye.developpez..../ed/inc/bits.h
Il ne faut pas être frileux. Il faut au contraire être curieux, expérimenter pas à pas et afficher les résultats sous la forme hexa (très proche du binaire). Il n'y a que comme ça qu'on arrive à maitriser une technique nouvelle...
...merci pour toutes ces infos, je vais tester ca et je vous tiens au courant de l'evolution.
Partager