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 :

operator << dans #define


Sujet :

C++

  1. #1
    Membre averti
    Inscrit en
    Septembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 53
    Par défaut operator << dans #define
    Bonjour,

    en regardant le code exemple des NxController du moteur PhysX j'ai bloqué sur un problème de syntaxe :
    Il y a cette ligne dans le programme d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    enum CollisionGroup
    {
    	GROUP_NON_COLLIDABLE,
    	GROUP_COLLIDABLE_NON_PUSHABLE,
    	GROUP_COLLIDABLE_PUSHABLE,
    };
     
    #define COLLIDABLE_MASK	(1<< GROUP_COLLIDABLE_NON_PUSHABLE)
    Qu'y a-t'il dans COLLIDE_MASK ?? à quoi sert << ??

    Merci d'avance !

    ++

    Charlie

  2. #2
    Membre chevronné
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Par défaut
    Collide Mask contiendra le mask binaire 10.

    << appliqué sur des entiers est un opérateur qui agit directement sur les bits, en les déplacant.

    Exemple:

    Veut dire: tu prend la représentation binaire de 1 (00000001) et tu le déplace 2 fois à gauche.

    Donc le nombre devient:
    00000100

    ce qui représente 4.

    Dans l'autre sens, c'est pareil:

    00100000 >> 2
    devient donc
    00001000

    attention à la perte de donnée

    (00000001 >> 1) << 1 ça donne 0 car 0 << X donne toujours 0.

  3. #3
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Salut,

    On peut ajouter une précision sur le fonctionnement des énumérations:

    Par défaut (comprend: en dehors de toute indication de valeur contraire), la première valeur énumérée d'une énumération vaut... 0 et toute valeur énumérée vaut... la valeur énumérée précédente +1.

    Cela signifie que, dans l'exemple que tu donne:
    • GROUP_NON_COLLIDABLE vaut 0
    • GROUP_COLLIDABLE_NON_PUSHABLE vaut 1
    • GROUP_COLLIDABLE_PUSHABLE vaut 2
    Maintenant, comme l'a si bien indiqué JulienDuSud, l'opérateur << provoque le décalage des bits vers la gauche du nombre de bit correspondant à ce qui se trouve après l'opérateur.

    De ce fait, le défine remplacera
    • COLLIDABLE_MASK (1<< GROUP_NON_COLLIDABLE) par la valeur binaire 00000001 (soit... 1 en décimal)
    • COLLIDABLE_MASK (1<< GROUP_COLLIDABLE_NON_PUSHABLE) par la valeur binaire 00000010 (soit 2 en décimal)
    • COLLIDABLE_MASK (1<< GROUP_COLLIDABLE_PUSHABLE) par la valeur binaire 00000100 (soit 4 en décimal)


    Comme il s'agit d'une directive de définition destinée au préprocesseur, tu peux estimer que, chaque fois que tu rencontre COLLIDABLE_MASK(1<< un des termes énumérés), cela revient à écrire dans le code respectivement 1, 2 ou 4, mais avec des valeurs plus "parlantes"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Réponses: 13
    Dernier message: 31/10/2008, 13h32
  2. Réponses: 2
    Dernier message: 11/08/2008, 08h28
  3. Réponses: 2
    Dernier message: 06/03/2008, 14h45
  4. [Struts] paramètre JS dans un bean:define
    Par Mrlud dans le forum Struts 1
    Réponses: 4
    Dernier message: 09/06/2005, 14h38
  5. afficher la signature des opérations dans XDE
    Par ChristopheH dans le forum Rational
    Réponses: 1
    Dernier message: 24/05/2004, 15h41

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