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 :

avis operator >>


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Par défaut avis operator >>
    Bonjour tout le monde,

    J'aurais besoin d'un avis sur l'utilisation de >>
    Je n'ai pas trop l'habitude de m'en servir.
    quelqu'un aurait-il la gentillesse de me confirmer que l'instruction:
    va bien diviser i et (ihi-ilo) par deux?

    Je trouve ça ne facilite pas la compréhension du code. Il faut que je m'y fasse ou au contraire, on recommanderait, plutôt quelque chose comme:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    i=i/2;
    ihi=ihi/2;
    ilo=ilo/2;

    Merci par avance

  2. #2
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Bonjours,
    Si tu n'as pas besoin d'optimiser ton programme a l'instruction près, utilise plutôt le '/', c'est beaucoup plus clair.
    Remarque que ca ne t'empêche pas de l'écrire sur une seul ligne:
    En plus il faut se méfier de l'opérateur >> sur les nombre signé. Il garde le bit de signe, et ce n'est pas toujours ce qu'on veux.

  3. #3
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    salut,

    le code ci-dessus est équivalent à

    Je trouve ça ne facilite pas la compréhension du code.
    Eh bien saches que tu n'es pas le seul !

    Si tu n'as pas besoin d'optimiser ton programme a l'instruction près
    Non: dans l'immense majorité des cas, ce genre de pseudo optimisation ne sert carrément à rien: le compilateur sait très bien faire l'optimisation tout seul ; donc pas besoin de pondre un code imbuvable pour obtenir le même résultat au niveau des performances.

    D'une façon plus générale, 99% des optimisations dans ce genre (ie. qui ne concernent pas l'algorithmique) sont effectuées par le compilateur et (hormis cas très rare), tu peux être à peu près certain que le compilo saura bien mieux optimiser que la plupart des développeurs, même expérimentés.

    Donc savoir à quoi correspond ce genre de notation, c'est toujours bon à prendre ; l'utiliser dans son propre code (surtout s'il doit être relu par d'autres) est amha plus contre-productif qu'autre chose (source d'erreurs, d'incompréhensions, de perte de temps de dév., ... pour un gain nul).

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Par défaut
    Merci pour vos réponses,
    j'ai néanmoins encore besoin d'une précision.

    si on écrit
    i sera divisé par 2
    mais est-ce que ihi et ilo seront divisé par 2 individuellement,
    ou i se voit seulement attribuer comme valeur la différence ihi-ilo divisé par 2?

    C'est important de le savoir car la suite du code fait appel à ihi et ilo.

    Merci

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par tikam75007 Voir le message
    Merci pour vos réponses,
    j'ai néanmoins encore besoin d'une précision.

    si on écrit
    i sera divisé par 2
    mais est-ce que ihi et ilo seront divisé par 2 individuellement,
    ou i se voit seulement attribuer comme valeur la différence ihi-ilo divisé par 2?

    C'est important de le savoir car la suite du code fait appel à ihi et ilo.

    Merci
    >> s'applique à l'expression qui le précède mais ne la modifie pas. Donc i vaut (ihi-ilo)>>1, mais ihi et ilo ne sont pas changés.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    34
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 34
    Par défaut
    ok 3D archi,


    merci pour la précision,
    je venais de faire un nouveau poste pour demander le sort réservé à (ihi-ilo).
    Merci à tous.

  7. #7
    Membre expérimenté Avatar de Nogane
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    241
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 241
    Par défaut
    Non: dans l'immense majorité des cas, ce genre de pseudo optimisation ne sert carrément à rien: le compilateur sait très bien faire l'optimisation tout seul ; donc pas besoin de pondre un code imbuvable pour obtenir le même résultat au niveau des performances.
    Histoire que le message passe bien, on va rajouter une couche :
    -> La seule bonne raison d'utiliser le décalage de bit est dans la manipulation des drapeaux où on veut effectivement signifier au lecteur de code que l'on joue avec des drapeaux et qu'on veut accéder à un (ou des) bit(s) en particulier.
    -> Sinon, utilises le /2 si tu veux faire une division par 2. Ça génère le même code que le décalage de bit... mais c'est beaucoup plus simple à comprendre !
    Ok ok! j'ai bien comprit maintenan^^
    C'est juste que y'a 15 ans on disait exactement le contraire. Il faut que je me mette au gout du jour.
    Si ca peux rassurer, je n'aurais utilisé ce genre de bidouille (>>) que dans un code aillant une réel nécessité d'optimisation, c'est a dire assez rarement finalement.

  8. #8
    Modérateur
    Avatar de nouknouk
    Homme Profil pro
    Inscrit en
    Décembre 2006
    Messages
    1 655
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 655
    Par défaut
    Citation Envoyé par Nogane Voir le message
    C'est juste que y'a 15 ans on disait exactement le contraire. Il faut que je me mette au gout du jour.
    C'était pertinent il y a 15 ans, mais ça ne l'est plus désormais:

    - la puissance n'est plus un problème aussi critique que de nos jours, pour deux raisons:

    * un processeur moyen/haut de gamme coûte désormais beaucoup moins cher par exemple qu'un développeur pendant une journée. Il y a 15 ans c'était exactement l'inverse.

    * la plupart des ordinateurs, même bas de gamme ont 10x plus de puissance que ce que le commun des mortels n'en utilise (en gros: hors traitement vidéo, grosse compression, 3D et jeux): désormais le plus petit des processeurs sur le marché s'acquite sans souci de l'ensemble des tâches qu'on lui demande ; cf. les netbooks et leurs processeurs Atom.

    - les compilateurs ont fait d'immenses progrès en 15 ans. Désormais il sont capables de très bien comprendre la 'logique' d'un code (simple) et de l'adapter pour qu'il soit le plus performant possible.

    - les architectures de processeurs se sont énormément complexifiées avec le temps (instruction supplémentaires, gestion du cache, ...); et de plus en plus rares sont les développeurs qui peuvent prétendre avoir les connaissances suffisantes pour prévoir à l'avance ce qui optimisera quelque-chose ou pas.

    De fait, l'optimisation de nos jours ne se fait plus vraiment à priori, mais à postériori: on code en suivant - certes - des bonnes règles de conduite de base, mais sans se soucier au final des moindres optimisations pour gagner deux nanosecondes par fonction.
    Une fois une première version fonctionnelle, si (et seulement si) on est confronté à des problèmes de performance, on va faire du 'profiling' pour identifier les 'points chauds' du code et n'optimiser que ces parties là.
    C'est beaucoup plus productif au final.

  9. #9
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par Nogane Voir le message
    C'est juste que y'a 15 ans on disait exactement le contraire. Il faut que je me mette au gout du jour.
    C'est exactement le genre de bidouille que je pouvais faire il y a 15 ans en C pour des plateformes embarquées ... mais qu'aujourd'hui sont devenues non seulement inutiles mais contreproductive dans le sens où elles obscurcissent le code.

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Histoire que le message passe bien, on va rajouter une couche :
    -> La seule bonne raison d'utiliser le décalage de bit est dans la manipulation des drapeaux où on veut effectivement signifier au lecteur de code que l'on joue avec des drapeaux et qu'on veut accéder à un (ou des) bit(s) en particulier.
    -> Sinon, utilises le /2 si tu veux faire une division par 2. Ça génère le même code que le décalage de bit... mais c'est beaucoup plus simple à comprendre !

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut
    Citation Envoyé par 3DArchi Voir le message
    Histoire que le message passe bien, on va rajouter une couche :
    -> La seule bonne raison d'utiliser le décalage de bit est dans la manipulation des drapeaux où on veut effectivement signifier au lecteur de code que l'on joue avec des drapeaux et qu'on veut accéder à un (ou des) bit(s) en particulier.
    Et encore, j'aurais tendance, pour éviter tout malentendu, à placer ces drapeaux dans une énumération...

    J'aurais ainsi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    enum flag
    {
        drapeau0 = 1<<0, //plutot que = 1
        drapeau1 = 1<<1, // plutot que =2
        drapeau2 = 1<<2, //plutot que  = 4
        /*...*/
        drapeau25 = 1<<25, // plutot que ... heu... ca fait combien ??? :P:D
    };
    De cette manière, l'utilisateur ne doit s'inquiéter que du drapeau qu'il veut activer / désactiver, sans même avoir besoin de s'inquiéter de sa valeur réelle.

    Si les différents drapeaux ne sont pas exlusifs, il faudra cependant envisager de créer une surcharge des opérateur &, | et ^
    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

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

Discussions similaires

  1. Comparatif des hébergeurs payants : Vos avis
    Par RideKick dans le forum Hébergement
    Réponses: 346
    Dernier message: 12/03/2017, 10h47
  2. [Avis] Les meilleurs programmes Java ?
    Par christopheJ dans le forum ImageJ
    Réponses: 69
    Dernier message: 07/10/2008, 01h12
  3. Donnez votre avis sur les articles de Developpez.com
    Par Geronimo dans le forum C++Builder
    Réponses: 13
    Dernier message: 14/01/2007, 22h00
  4. Qui se sert de Together ici ? votre avis ?
    Par Matthieu Brucher dans le forum Autres
    Réponses: 28
    Dernier message: 25/08/2006, 09h44
  5. Donnez votre avis sur les articles de Developpez
    Par Anomaly dans le forum Contribuez
    Réponses: 37
    Dernier message: 29/05/2006, 21h48

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