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 :

Trouver rapidement l'opposé d'un nombre


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut Trouver rapidement l'opposé d'un nombre
    Bonjour à tous et toutes,

    Je me demandais quelle était la manière la plus rapide (quel que soit l'ordre de grandeur du temps) d'obtenir l'opposé d'un nombre.

    3 choix s'offrent à moi :

    • nbr = -nbr
    • nbr *= -1
    • nbr -= 2 * nbr


    Qu'en pensez-vous ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 152
    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 152
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    et utiliser un mask pour juste inverser le bit de signe ?
    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
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,

    Si nbr est un int :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    nbr -= 2 * nbr;
    neg eax
    (Visual 2010 release)

  4. #4
    Membre confirmé
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Août 2011
    Messages
    88
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Août 2011
    Messages : 88
    Par défaut
    D'après ce que j'ai lu, au moins les deux premières seraient optimisées de la même façon avec un flip du bit de signe par gcc.

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Par défaut
    Les entiers en C/C++ sont en code complément à deux, non ? Si oui l'inversion d'un nombre demande plus que l'inversion d'un bit.

  6. #6
    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 cob59 Voir le message
    Les entiers en C/C++ sont en code complément à deux, non ? Si oui l'inversion d'un nombre demande plus que l'inversion d'un bit.
    A peine plus : une inversion de tous les bit et l'ajout de 1...

    Mais il n'est pas du tout impossible que c'est ce que fait neg eax
    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

  7. #7
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Citation Envoyé par koala01 Voir le message
    SalutA peine plus : une inversion de tous les bit et l'ajout de 1...

    Mais il n'est pas du tout impossible que c'est ce que fait neg eax
    C'est ce que je pensais aussi mais bizarrement nbr = ~nbr + 1; émet :
    not eax
    inc eax
    Peut être que neg est un peu plus sioux que ça ?
    En tout cas amusant de voir qu'en tentant de faire à la main le complément à deux on se retrouve à émettre deux instructions au lieu d'une seule avec l'opération naïve.

Discussions similaires

  1. Réponses: 13
    Dernier message: 25/04/2012, 18h04
  2. Réponses: 10
    Dernier message: 21/03/2010, 22h41
  3. Trouver rapidement les zéros d'une fonction
    Par nahouto dans le forum MATLAB
    Réponses: 17
    Dernier message: 23/01/2009, 13h32
  4. trouver une date à partir d'un nombre de jours
    Par charlene44 dans le forum Delphi
    Réponses: 4
    Dernier message: 21/08/2006, 14h27
  5. [Access] Trouver qui a le plus grand nombre de visites
    Par maxidoh dans le forum Langage SQL
    Réponses: 13
    Dernier message: 03/04/2006, 03h00

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