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...
Version imprimable
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 :Citation:
Envoyé par Arthur59
mettre à 0 le bit 4 :Code: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: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:
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].Citation:
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:B &= ~(0xF << 4);
Nota. Pour générer un masque à partir de la largeur, c'est facile, c'estCode:B |= (x << 4);
En effet :Code:masque = (1 << largeur) - 1;
Ceci peut aider :Code:
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 :cry: .
OK, ca marche: merci beaucoup Emmanuel. :D