[Debutant C ] Modifier un bit dans une variable

cs_GentooUser Messages postés 5 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 avril 2004 - 15 avril 2004 à 13:54
cs_GentooUser Messages postés 5 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 avril 2004 - 15 avril 2004 à 17:17
Salut,

Voila j'ai une variable de type BYTE (unsigned char) donc 8bits, et j'aimerai pouvoir définir à 1 ou 0 chaque bits de la variable independement.

Pour les lires j'utilise une macro #define BIT(v, i) ((v) & (0x80 >> (i)) ? 1 : 0 qui marche
Mais pour les ecrires ?

--------------------------------------------------------------------------------
Microsoft: Créateur de bugs depuis 1978

8 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2004 à 14:11
OR (|) ou bien AND (&).

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_GentooUser Messages postés 5 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 avril 2004
15 avril 2004 à 14:43
C'est ce que je fait

#define SET_BIT(v, b) (v) = ((v) & 0xFFFF) | (1 << (b)) pour definir un bit à 1 et ca marche, mais pour le mettre à 0 c'est plus dur.

Pour mettre à 0 le sixième bit par exemple, si j'utilise un masque 0xFFF8, ça marche mais ça efface aussi les bits 7 et 8

-------------------------------------------------------------------------------------------------
Microsoft: Créateur de bugs depuis 1978
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2004 à 14:46
var |= value;

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_GentooUser Messages postés 5 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 avril 2004
15 avril 2004 à 15:21
Desolé je dois être un gros boulet mais j'y arrive pas :(

Y'a pas un lien sur un cour bien expliqué sur le sujet ?

--------------------------------------------------------------------------------
Microsoft: Créateur de bugs depuis 1978
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2004 à 15:24
Mais te suffit d'enlever le masque AND que tu fais au debut.
Ce AND masque les bits, n'a donc rien a faire ici.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_GentooUser Messages postés 5 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 avril 2004
15 avril 2004 à 16:35
J'ai essayé :
#define SET_BIT(v, b, x) (v) = ((v) |= (x) << (b))
Mais toujour le même pb (ça marche pour mettre le bit à 1, mais pas à 0)

Merci quand même

--------------------------------------------------------------------------------
Microsoft: Créateur de bugs depuis 1978
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
15 avril 2004 à 16:42
normal, regarde la table de BOOL.
Pour mettre a ZERO c'est le AND avec un mask, ce que tu avais mis precedemment.

ciao...
BruNews, Admin CS, MVP Visual C++
0
cs_GentooUser Messages postés 5 Date d'inscription jeudi 15 avril 2004 Statut Membre Dernière intervention 15 avril 2004
15 avril 2004 à 17:17
BruNews -> Merci ça marche :big)

BjarneStroustrup -> no comment...

--------------------------------------------------------------------------------
Microsoft: Créateur de bugs depuis 1978
0
Rejoignez-nous