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 :

tester bit d'un integer


Sujet :

C#

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 166
    Par défaut tester bit d'un integer
    Bonsoir

    je voudrais savoir s'il était possible de connaitre l’état d'un des bits d'un integer ?

    par exemple, j'ai

    comment savoir si le bit 2 de mon integer est actif ?

    merci

    @++

    KaloOopS

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 166
    Par défaut
    Désolé j'avais pas assez cherché sur le net ...

    Merci Shakespeare ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    void Main()
    {
        //0x05 = 101b
        Console.WriteLine(IsBitSet(0x05, 0)); //True
        Console.WriteLine(IsBitSet(0x05, 1)); //False
        Console.WriteLine(IsBitSet(0x05, 2)); //True
    }
     
    bool IsBitSet(byte b, byte nPos){
        return new BitArray(new[]{b})[nPos];
    }
    si jamais ça vous intéresse

    @++

    KaloOopS

    PS : pas mal le concept de la question et de l'auto-réponse non ??

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Utiliser un BitArray pour ça, c'est un peu lourd... Normalement les manipulations de bit ça se fait avec les opérateurs binaires (&, |, ~, <<, >>).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    bool IsBitSet(byte b, byte nPos)
    {
        byte mask = (byte)(1 << nPos);
        return (b & mask) != 0;
    }

  4. #4
    Membre Expert Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Par défaut
    Tomlev a raison. Cela dit son exemple est peut-être lourd pour un néophyte.

    L'opérateur "&" (ET) effectue une comparaison bit à bit : dans le résultat un bit est vrai seulement s'il était vrai dans les deux opérandes.

    Prenons le nombre 13 (8 + 4 + 1) = 1101 en binaire.
    Mettons qu'on veuille tester si le troisième bit (4 = 0100) est vrai.
    13 & 4 = 1101 & 0100 = 0100

    Autrement dit "x & 4" est différent de 0 si et seulement si le troisième est vrai dans x.

    Pour tester si le premier bit est vrai : (i & 1) != 0
    Pour tester si le second bit est vrai : (i & 2) != 0
    Pour tester si le troisième bit est vrai : (i & 4) != 0
    Pour tester si le quatrième bit est vrai : (i & 8) != 0

    Pour tester si le premier et le quatrième bit sont tous les deux vrais : (i & 9) != 0

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 166
    Par défaut
    Bonsoir

    Je connais bien le principe des masques et des ROL et ROR, mais dans l'automatisme ... (normal c'est mon boulot )

    Merci pour vos exemples et explications

    @++

    KaloOopS

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par KaloOopS Voir le message
    Je connais bien le principe des masques et des ROL et ROR, mais dans l'automatisme ... (normal c'est mon boulot )
    Attention, les opérateurs << et >> correspondent à des décalages (shift), et non des rotations... la "retenue" n'est pas reportée de l'autre côté

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2010
    Messages : 166
    Par défaut
    Ok merci pour cette précision

    @++

    KaloOopS

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 27/05/2007, 15h40
  2. Tester nombre : float ou integer?
    Par webrider dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 14/04/2007, 15h02
  3. Stockage de bits dans un Integer
    Par Mayamok dans le forum Access
    Réponses: 17
    Dernier message: 15/12/2006, 15h06
  4. Réponses: 9
    Dernier message: 16/11/2006, 14h08
  5. tester l'état d'un bit d'une variable
    Par jphi5 dans le forum C
    Réponses: 5
    Dernier message: 15/09/2003, 13h17

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