[Debutant C ] Modifier un bit dans une variable

Signaler
Messages postés
5
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 avril 2004
-
Messages postés
5
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 avril 2004
-
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

Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
OR (|) ou bien AND (&).

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
5
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 avril 2004

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
var |= value;

ciao...
BruNews, Admin CS, MVP Visual C++
Messages postés
5
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 avril 2004

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
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++
Messages postés
5
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 avril 2004

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
Messages postés
21042
Date d'inscription
jeudi 23 janvier 2003
Statut
Modérateur
Dernière intervention
21 août 2019
24
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++
Messages postés
5
Date d'inscription
jeudi 15 avril 2004
Statut
Membre
Dernière intervention
15 avril 2004

BruNews -> Merci ça marche :big)

BjarneStroustrup -> no comment...

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