IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

extraction de bits d'un short (ou d'un char)


Sujet :

C

  1. #1
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Par défaut extraction de bits d'un short (ou d'un char)
    Hello,
    Je voudrais extraire des booléens (décrivant des bits) depuis un short (qui décrit un registre de 2 octets).
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Short Val=0x0255;
    Bool Bit;
     
    Bit=Val[2];
    En fait, je voulais m'affranchir d'avoir à créer un tableau de booleens pour extraire les éléments 'bit à bit '. Existe t-il un moyen d'accéder aux éléments d'un short/int de la même manière que pour les string / char ?
    Merci pour votre réponse.

  2. #2
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    Tu peux utiliser les decalages de bit.

  3. #3
    Membre averti
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Par défaut
    Cela ne me permettra jamais de récupérer des bits spécifiques ?

  4. #4
    Membre extrêmement actif

    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Juin 2003
    Messages
    4 506
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2003
    Messages : 4 506
    Par défaut
    si tu veux savoir l'etat d'un bit il suffit d'utiliser l'operateur de bit a bit (&)

  5. #5
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut Re: extraction de bits d'un short (ou d'un char)
    Citation Envoyé par julie20
    Je voudrais extraire des booléens (décrivant des bits) depuis un short (qui décrit un registre de 2 octets).
    Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Short Val=0x0255;
    Bool Bit;
     
    Bit=Val[2];
    En fait, je voulais m'affranchir d'avoir à créer un tableau de booleens pour extraire les éléments 'bit à bit '. Existe t-il un moyen d'accéder aux éléments d'un short/int de la même manière que pour les string / char ?
    Le comportement des opérateurs binaires n'est portable que sur les entiers non signés.

    L'opérateur binaire & permet de tester la valeur d'un ou plusieurs bits :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
       unsigned x = 0xC0;
     
       if (x & 0x80)
       {
          puts ("le bit 7 est a 1\n");
       }
       else
       {
          puts ("le bit 7 est a 0\n");
       }
    L'opérateur binaire ! (à ne pas confondre avec ~) permet de transformer 0 en 1 et <>0 en 0

    Comme dans ce cas, x & 0x80 vaut 0x80 (soit <>0), !(x & 0x80) vaut donc 0 et !!(x & 0x80) vaut donc 1.

    On peut donc écrire tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
       unsigned x = 0xC0;
     
       printf ("le bit 7 est a %d\n", !!(x & 0x80));
    0x80 (bit 7) peut s'écrire (1u << 7). Je te laisse donc ecrire le code qui retourne le bit n d'un entier non signé.

  6. #6
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    As tu envisagé les champs de bits dans une structure. Ce n'est pas portable, mais apparemment dans ton sujet, la portabilité n'a pas l'air d'avoir d'importance (lecture de registres)

Discussions similaires

  1. extractions de bit dans un octet
    Par McPerlin dans le forum Langage
    Réponses: 2
    Dernier message: 20/02/2011, 19h10
  2. array byte short 16 bit signed integer
    Par ouiouioui dans le forum Langage
    Réponses: 4
    Dernier message: 08/04/2010, 15h51
  3. Extraction de bits à partir du chaine de caracteres hexa
    Par julinho99 dans le forum Débuter
    Réponses: 5
    Dernier message: 09/06/2008, 16h12
  4. utilisation de chaque bit d'un short.
    Par poporiding dans le forum C++
    Réponses: 7
    Dernier message: 03/04/2007, 02h37
  5. [bit]Mettre un mot de 16 bits (string) en short
    Par -=Spoon=- dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 27/03/2004, 21h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo