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 :

opérateur de décalage, ou multiplication


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Par défaut opérateur de décalage, ou multiplication
    Bonjour,
    J'utilise Qt dans son ensemble.
    Je suis amené à traiter des gros volumes de données sérialisées Big ou Little Endian.

    A ce titre, j'ai tendance lors d'une conversion d'endianness de faire (et pour faire court dans l'exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    quint16 fromBigEndianUCharArray(const uchar *src)
    {
        return static_cast<quint16>(src[1] << 8) | static_cast<quint16>(src[0]);
     
    }
    une fonction Qt fait la même chose mais de cette façon (j'ai supprimé les infos de template) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    inline quint16 qFromBigEndian(const uchar *src)
    {
        return quint16( 0
                        | src[1]
                        | src[0] * quint16(0x0100));
    }
    J'ai donc au moins deux questions :
    1. l'opérateur de multiplication, en remplacement de l'opérateur de décalage est-il plus efficace ?
    2. à quoi cela sert-il de commencer l'algo avec un OU avec 0 ?

  2. #2
    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 Yricl Voir le message
    l'opérateur de multiplication, en remplacement de l'opérateur de décalage est-il plus efficace ?
    Pour la multiplication par des valeur représentées sur un seul bit (1, 2, 4, 8, ...), il n'y a pas de différence en terme de performances car la multiplication revient, effectivement, effectuer un décalage de bits.
    à quoi cela sert-il de commencer l'algo avec un OU avec 0 ?
    A s'assurer, tout simplement, que l'on ait effectivement une valeur nulle

    En effet, si tu ne définis pas la valeur à 0 au début de l'algorithme, il n'est pas exclu que la mémoire utilisée par ta variable contienne "les crasses" d'une utilisation précédente, et que tu obtiennes donc un résultat incohérent.

    Le OU binaire permet de récupérer tous les bits qui sont effectivement à 1 aussi bien du coté de la valeur d'origine (raison pour laquelle la valeur d'origine doit être égale à 0 ) que du coté de la valeur à prendre en compte
    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

  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 : 50
    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
    0 étant un entier, il sert à forcer les opération suivantes à être sur des entiers. Ça évite de devoir écrire un cast.

    Pour ce genre de manipulations, j'ai tendance à préférer les décalages, question stylistique.
    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
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par JolyLoic Voir le message
    0 étant un entier, il sert à forcer les opération suivantes à être sur des entiers. Ça évite de devoir écrire un cast.

    Pour ce genre de manipulations, j'ai tendance à préférer les décalages, question stylistique.
    Question stylistique, ce qui me gène c'est la multiplication avec le ou logique. Soit on considère qu'il s'agit d'une manipulation arithmétique, et on fait une multiplication avec un addition, soit qu'il s'agit d'une manipulation de bits et on fait un ou logique avec un décalage.

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Landes (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Juillet 2012
    Messages : 2
    Par défaut
    Merci de vos réponses.

    Je vais donc ajouter le OU logique avec 0 à mes templates, et rester avec mon opérateur de décalage, ce qui me semble plus lisible.

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

Discussions similaires

  1. [Débutant] Opérateurs Bitwise (Décalage)
    Par crimetime dans le forum C
    Réponses: 2
    Dernier message: 03/06/2010, 11h17
  2. opérateurs de décalage bit à bit
    Par psycho_xn dans le forum Général Java
    Réponses: 4
    Dernier message: 02/12/2009, 18h19
  3. Opérateurs de décalage de bits
    Par Satch dans le forum Langage
    Réponses: 15
    Dernier message: 09/06/2008, 08h41
  4. Opérateurs de décalage récalcitrants
    Par gabier dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 21/03/2008, 23h41
  5. Multiplication par décalage de bits
    Par tekman54000 dans le forum Assembleur
    Réponses: 2
    Dernier message: 25/10/2005, 11h35

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