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 :

Masque Binaire: Compréhension


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut Masque Binaire: Compréhension
    Bonjour tout le monde!

    Je cherche à définir un masque binaire pour savoir si telle ou telle classe est de tel ou tel type.

    Je défini mes masques de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    const short CLASSPARENT   = 0x01;
    const short CLASSPARENTB = 0x02; //JAMAIS UTILISE
    const short CLASSA_MASK            = 0x03 | CLASSPARENT;
    const short CLASSB_MASK            = 0x04 | CLASSPARENT; 
    const short CLASSAB_MASK          = 0x05 | CLASSA_MASK | CLASSB_MASK;
    Mon problème est le suivant: le test suivant me retourne toujours vrai:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (test::CLASSAB_MASK & test::CLASSPARENTB)
    alors qu'il devrait (ou plutôt je souhaiterais...) me retourner faux.

    Je n'ai jamais créé de masque binaire avant donc je ne sais pas si c'est la meilleur façon de procéder.

    Si vous avez des conseils, je suis preneur.

    Merci

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    puisque tu parles de binaire, attarde-toi sur le binaire correspondant.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    0x01 = 001
    0x02 = 010
    0x03 = 011
    0x04 = 100
    0x05 = 101
    Donc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CLASSPARENT   = 0x01 = 001
    CLASSPARENTB = 0x02 = 010
    CLASSA_MASK    = 0x03 | CLASSPARENT = 011 | 001 = 011
    CLASSB_MASK    = 0x04 | CLASSPARENT = 100 | 001 = 101
    CLASSAB_MASK  = 0x05 | CLASSA_MASK | CLASSB_MASK = 101 | 011 | 101 = 111
    Donc oui, ton test est toujours vrai.
    Généralement pour faire un mask binaire, on s'arrange pour que chaque bit soit unique.
    0x01, 0x02, 0x04, 0x08, ...
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Juste un petit complément : Si on veut vraiment savoir si une classe est ou pas d'un certain type, on a dynamic_cast. Pas la peine de bricoler un système à soi dans son coin.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  4. #4
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut
    Bonjour,

    Merci pour les réponses.

    Je viens effectivement de voir le problème d'unicité des bits.
    Est-ce que je me trompe ou l'ensemble des puissances de 2 peut me permettre de résoudre ce problème? (2^0 => 0x01, 2^1 => 0x02, 2^2 => 0x04, 2^3 => 0x08...)

    Citation Envoyé par JolyLoic
    Juste un petit complément : Si on veut vraiment savoir si une classe est ou pas d'un certain type, on a dynamic_cast. Pas la peine de bricoler un système à soi dans son coin.
    Nous cherchons justement à éviter de faire des dynamic_cast bien plus coûteux en temps cpu qu'un test binaire.

    Pour information, il y a d'énormes problèmes de conception mais je n'ai pas le droit d'y toucher... seulement d'améliorer le code existant.

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 153
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 153
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par darkman19320 Voir le message
    Est-ce que je me trompe ou l'ensemble des puissances de 2 peut me permettre de résoudre ce problème? (2^0 => 0x01, 2^1 => 0x02, 2^2 => 0x04, 2^3 => 0x08...)
    Oui c'est ce qu'on apelle le binaire, ou base 2.
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  6. #6
    Membre éclairé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2010
    Messages
    517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Santé

    Informations forums :
    Inscription : Avril 2010
    Messages : 517
    Par défaut
    Ok merci pour la confirmation.

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

Discussions similaires

  1. [XL-2002] Dépassement de capacité masque binaire And
    Par Livegen dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/07/2010, 12h42
  2. Guider l'inpainting par un masque binaire
    Par highlight dans le forum Traitement d'images
    Réponses: 7
    Dernier message: 05/07/2010, 10h35
  3. Multiplication par masque binaire
    Par zepek dans le forum Images
    Réponses: 2
    Dernier message: 07/03/2009, 12h30
  4. masque binaire du cerveau en 3D
    Par kamelcompte dans le forum Images
    Réponses: 3
    Dernier message: 27/03/2008, 19h03
  5. Problème lors de l'application d'un masque binaire
    Par soeursourire dans le forum Images
    Réponses: 4
    Dernier message: 07/09/2007, 10h43

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