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 :

manipulation des bits


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 9
    Points
    9
    Par défaut manipulation des bits
    bonjour,

    je sais qu'il y a bcp d'articles dessus mais j'ai une question.

    je sais que pour décaller 2 bits vers la gauche je peux faire:

    x << 2

    maintenant:

    ayant une fonction lirebits(x,4,3) qui retourne les 3 bits des positions 4, 3 et 2 de x, cadrés à droite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    unsigned lirebits(unsigned x, int p, int n)
    {
       return ( x >> (p+1-n) ) & ~(~0 << n);
    }
    1.d'après mon book x >> (p+1-n) déplace les bits sélectionnés à l'etrêmité droite du mot:
    ==> je ne comprend pas comment.
    2. si ~ est le complément cela veut dire ~0 = 1 donc ~(~0 << n) <=> ~(1 << n)
    ==> je ne comprend pas non plus.

    quelqu'un pourrait bien me l'expliquer clairement svp?

    Merci de votre aide.

    Cdt

  2. #2
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    1.d'après mon book x >> (p+1-n) déplace les bits sélectionnés à l'etrêmité droite du mot:
    ==> je ne comprend pas comment.
    Parce qu'avec p = 4 et n = 3 comme dans ton exemple par exemple, ça donne x >> 2.

    00011011 : En gras les bits 4, 3 et 2 (4 = le plus à gauche). Après x >> 2, ça donne : 00000110.

    2. si ~ est le complément cela veut dire ~0 = 1 donc ~(~0 << n) <=> ~(1 << n)
    ==> je ne comprend pas non plus.
    Si on écrit en binaire pour bien voir, ~(00000000) = (11111111) et non (00000001). ~0 n'est pas du tout égal à 1.

    bonjour,

    je sais qu'il y a bcp d'articles dessus mais j'ai une question.
    Et tu devrais les lire.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    super!! j'ai bien compris, décidément t bien pédagogue :-)

    une deuxième question concernant les masques des bits ( pas masque de sous réseaux => je ne sais pas si y a une relation => j'ai pas vu ça dans les tutos)

    je me dis masque = masquer etc... mais pour quelle utilité.

    (je suis entrain de lire tes tutos (Melem) )

    Merci.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    Euh... Les tutos des manipulations des bits sont trop succinct ( à mon goût). je ne parle même pas des manipulations des masques.
    du coup j'ai bien compris tes explications mais les masques rien.
    Merci de ton aide

    cdt

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Un masque normalement est un nombre binaire qui, "appliqué" sur un autre nombre, va "masquer" certains bits de ce nombre avec masquer signifiant "mettre à 0".

    L'usage du terme masque vient du fait que quand on "masque", ou "cache" quelque chose, on ne peut plus la voir. C'est-à-dire-à-dire que tout se passera après comme si la chose n'existait pas. Un bit qui "n'existe pas" est associé à 0. Un bit qui "existe" est associé à 1.

    L'opérateur qui s'utilise avec un masque est l'opérateur & (ET). Par exemple, le masque 00111100 permet de ne garder intact que les bits 5, 4 3 et 2 d'un nombre, en mettant tous les autres bits à 0. En appliquant ce masque à 01001110 par exemple, on obtient 01001110 & 00111100 = 00001100.

    Il y a aussi des "masques" qui s'utilisent avec l'opérateur | (OU) qui, eux, servent à forcer certains bits à exister.

    L'utilité des masques ? Grande, très grande. Ils peuvent être utiles dans n'importe quel type d'application. Tu t'en apercevra très vite avec ton expérience.

  6. #6
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Citation Envoyé par deMonHunTer Voir le message
    Euh... Les tutos des manipulations des bits sont trop succinct ( à mon goût). je ne parle même pas des manipulations des masques.
    du coup j'ai bien compris tes explications mais les masques rien.
    Merci de ton aide

    cdt
    Ils sont toujours succints car ils n'y a plus rien à dire dans un cours de langage C. Le besoin de pouvoir accéder à l'information sous sa forme binaire est quelque chose qui peut se faire ressentir chez un programmeur et qui ne peut ne pas l'être chez un autre. Il y a cependant cette entrée de la FAQ qui donne un exemple de cas où la maîtrise des opérateurs de manipulation de bits est requise.

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    whaou... alors là.... je comprends de mieux en mieux

    donc quand j'ai :
    n = n & 0177;
    je suppose que 0177 c'est en octal qu'il faut convertir en binaire:

    donc n = n & 0111 1111

    donc d'après ce que t'as dit je garderai intact le b0 à b6 et comme masque et appliqué à n via un & j'aurai mes bits de n masqué.

    c'est bien ça?

    Edit: ajout:
    donc dans ton lien options & OPTION1 => OPTION1 sert de masque à options afin de retrouver 00000001 .... si c'est ça alors, j'ai tout compris et t un dieu!

  8. #8
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    C'est tout à fait ça

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 15
    Points : 9
    Points
    9
    Par défaut
    alors t un dieu pédagogue!!!

    MERCI

  10. #10
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Bin non chui qu'un simple chevalier d'or . Le mérite revient à toi de tout comprendre aussi facilement .

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. fonction de manipulation des bits
    Par hadiya dans le forum C++/CLI
    Réponses: 1
    Dernier message: 14/03/2014, 14h02
  2. Manipulation des bits
    Par JLC83 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/01/2010, 13h33
  3. Manipulation des bits
    Par BatuBou dans le forum C
    Réponses: 17
    Dernier message: 11/01/2008, 19h24
  4. Manipuler des bits
    Par line86 dans le forum C
    Réponses: 9
    Dernier message: 21/10/2007, 21h18
  5. [VS 2005] Manipuler des bits
    Par b_lob dans le forum C#
    Réponses: 5
    Dernier message: 05/02/2007, 09h51

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