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 d'un bit sur un entier [Débutant(e)]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Par défaut Manipulation d'un bit sur un entier
    Bonjour!!!
    encore une petite question pour la route tant que je suis sur ma lancée

    en fait, je souhaiterai manipuler un bit particulier d'un entier sur 16 bits.
    par exemple, admettons le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    uint16 entier = 0000 1010 1100 0110
    je souhaiterais pouvoir faire quelquechose de la sorte :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (bit en gras de l'entier sur 16 bit = 1)
    {
    instruction
    }
    j'ai essayer avec les decalage de bits, mais ils ne me permettent pas d'acceder a un bit en particulier
    existe t-il un procédé?
    merci encore pour votre aide si précieuse!!!

  2. #2
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    On peut utiliser des masques. Par exemple, pour effectuer une action en fonction de la valeur du troisième bit de poids faible de i:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (i & 0x4)
     ...
    else
     ...

  3. #3
    Membre averti
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Par défaut
    merci stephl ms je ne comprends pas tres bien la commande

    (i & 0x4)

    je ne vois pas comment je peux agir selon la valeur du 3e bit
    pourrais-tu me donner des precisions?
    merci d'avance

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    865
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 865
    Par défaut
    Il faut que tu penses en binaire.
    L'opérateur & fait un ET binaire entre deux arguments.
    Donc, pour l'exemple, 4 en binaire vaut 0000 0100. On ne fait donc un ET qu'avec le 3ème bit. Tu n'agis donc que selon la valeur du 3ème bit.

  5. #5
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par SybVicious
    merci stephl ms je ne comprends pas tres bien la commande

    (i & 0x4)

    je ne vois pas comment je peux agir selon la valeur du 3e bit
    pourrais-tu me donner des precisions?
    merci d'avance
    Il s'agit juste d'un ET bit à bit. Par exemple, si i vaut 20, voici ce qui se passe au niveau des bits en considérant juste l'octet de poids faible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    i:	00010100
    masque:	00000100
    ET:	00000100

  6. #6
    Membre averti
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Par défaut
    ok je commence a voir, merci.
    par contre derniere question, si i vaut 16 j'aurai alors

    i: 00010000
    masque: 00000100
    ET: 00000100

    si je veux travailler sur le 3e bit qui vaut 0 (je ne suis pas censé connaitre sa valeur) si je fais un ET avec 0x4 comme dans le code ci dessus, sa valeur ne sera t elle pas affectée?

  7. #7
    Membre averti
    Inscrit en
    Août 2006
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 42
    Par défaut
    petite correction, je me suis trompé, je confondais en croyant que 0 '&' 1 était égal à 1, tout est plus clair!
    merci beaucoup!!!

  8. #8
    Membre éprouvé
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Par défaut
    i: 00010000
    masque: 00000100
    ET: 00000000
    commence par:
    http://fr.wikipedia.org/wiki/Fonction_ET

  9. #9
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par SybVicious
    ok je commence a voir, merci.
    par contre derniere question, si i vaut 16 j'aurai alors

    i: 00010000
    masque: 00000100
    ET: 00000100

    si je veux travailler sur le 3e bit qui vaut 0 (je ne suis pas censé connaitre sa valeur) si je fais un ET avec 0x4 comme dans le code ci dessus, sa valeur ne sera t elle pas affectée?
    Le ET bit-à-bit n'affecte en rien la valeur des variables utilisées dans le calcul. Avec i=16 et le masque 0x4, le résultat est 0 ce qui indique que le troisième bit de poids faible de i est à zéro.

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

Discussions similaires

  1. Addition d'entier signé sur 64 bits sur un proc 32 bits
    Par SoJaS dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 10/08/2010, 07h22
  2. Réponses: 2
    Dernier message: 27/02/2006, 09h40
  3. [C#] manipulation d'un pointeur sur un entier
    Par gmonta dans le forum Windows Forms
    Réponses: 7
    Dernier message: 17/01/2006, 19h09
  4. Décalage de bit sur unsigned char [8]
    Par dboulange dans le forum C++
    Réponses: 14
    Dernier message: 26/07/2005, 14h10
  5. [DB2] LIKE sur des entiers
    Par heloise dans le forum DB2
    Réponses: 1
    Dernier message: 07/10/2004, 23h30

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