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
    Nouveau membre du Club
    Inscrit en
    Septembre 2007
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 53
    Points : 36
    Points
    36
    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 confirmé
    Inscrit en
    Août 2004
    Messages
    556
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 556
    Points : 588
    Points
    588
    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 sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 629
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 629
    Points : 30 692
    Points
    30 692
    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"

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