Testé la valeur du 7ème bit

Signaler
Messages postés
71
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
13 décembre 2008
-
Messages postés
71
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
13 décembre 2008
-
bonjour,

voila je fais une application qui envoi un caractere (char) à un processus et je dois savoir de quel processus il vient pour faire le bon traitement...

donc si c le processus 1, je voudrais mettre le bit 7 à 1 du char
et sinon je le laisse à 0...

et je voudrais aussi savoir comment on voit si le bit 7 apres le passage dans le tube est à 1, et si oui, comment enlever le 1 devant...

je vous remercie  

8 réponses

Messages postés
59
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
4 avril 2007

Il faut jouer avec les opérateur bit à bit | et &  (dans cet exemple j'ai supposé que le "bit 7" était le 7eme en partant de la gauche):

char c; // char a modifier

// modifier le bit:
c = c | 2;  // pour mettre le bit 7 à 1 (2== 00000010 en binaire )
c = c & 253; // pour mettre le bit 7 à 0 (253== 11111101 en binaire )

//lire le bit :
bool bit = c & 2;   // bit==true si le bit 7 est à 1, false sinon

Voila cela doit être bon ( mais fait sans test alors à vérifier).
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Quand on parle du 7ème bit, c'est toujours à partir de la droite donc:

c |= 64;
Pour mettre le 7ème bit à 1
c ^= 64
Pour mettre le 7ème bit à 0

if(c&64)
pour tester si 7ème bit == 1
if(!(c&64))
Pour tester si 7ème bit == 0

C++ (@++)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Oups pardon, petite erreur.

C'est pas
c ^= 64
mais
c &= 191;
Pour mettre le 7ème bit à 0.

C++ (@++)
Messages postés
59
Date d'inscription
samedi 1 janvier 2005
Statut
Membre
Dernière intervention
4 avril 2007

Désolé autant pour moi (j'avais une chance sur deux alors j'ai pris dans le sens de la lecture ^^)
Messages postés
1910
Date d'inscription
vendredi 18 juin 2004
Statut
Modérateur
Dernière intervention
14 novembre 2014
13
Salut,


Normalement, les bits sont représentés de gauche à droite par leurs puissances de 2:


76543210

10101010

Ainsi le bit 7 est le premier à gauche. Il a donc le poids le plus fort dans un octet.

Pour mettre ce bit à 1 il suffit d'appliquer un OR à l'octet avec la
valeur 0x80. Pour le mettre à 0 on lui applique un AND avec l'inverse
bit à bit de la valeur 0x80. Pour savoir si ce bit 7 est à 1 on teste
l'octet avec la valeur 0x80. Exemple:

    char a,b;

    a=49;

    // Mettre le bit 7 à 1:

    a=a | 0x80;

    //Mettre le bit 7 à 0:

    a= a & ~0x80;

    // Récupérer l'état du bit 7:

    b= a & 0x80;
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
Le bit 7 est à l'extrême gauche oui mais là on parle du 7ème bit donc du bit 6.
Menfin, si ce n'est pas le cas, il s'est mal exprimé.
C++ (@++)
Messages postés
3212
Date d'inscription
lundi 7 novembre 2005
Statut
Membre
Dernière intervention
16 février 2009
15
A non! En fait c'est moi qui ai mal lu. Il s'agit bien du bit 7 et non du 7ème.
Désolé.

C++ (@++)
Messages postés
71
Date d'inscription
mardi 20 décembre 2005
Statut
Membre
Dernière intervention
13 décembre 2008

ben en faite toute marche bien sur des caracteres sans accent et chiffres mais dès que y a un accent ca va plus car le bit 7, donc le 8 est à 1 dès qu'on met un accent, donc impossible de savoir...