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

Langage C++ Discussion :

Addition d'unsigned int


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Par défaut Addition d'unsigned int
    bonjour à tous,

    j'ai un petit soucis d'addition...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    unsigned int a = 2654554104;
    unsigned int b = 4288157188;
    unsigned int c = a + b;
     
    // c renvoie 2647743996 au lieu de 6942711292
    Quelqu'un pour m'expliquer cette bizarerie ?

  2. #2
    Membre Expert Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Par défaut
    un unsigned int est stocké sur 32bit, donc sa valeur max est : 2^32 = 4294967296.

    Là tu exploses ce nombre.
    Si on raisonne en bit :
    2654554104 : 10011110001110010100011111111000 (32bit)
    4288157188 : 11111111100110000001011000000100 (32 bit)

    6942711292 : 110011101110100010101110111111100 (33 bit)

    Donc tu vas perdre le bit de poids fort. ce qui va donner :
    10011101110100010101110111111100 = 2647743996

  3. #3
    Invité
    Invité(e)
    Par défaut
    edit : grillé, wokay.


    J'imagine que t'es sur une plate-forme où les uint sont codés sur 32 bits.

    Or, valeur maximale d'un entier non signé codé sur 32 bits : MAX = 4294967296.
    Et faire 2654554104 + 4288157188 fait bien 6942711292, ce qui dépasse la valeur maximale.

    Donc visiblement, dans ton cas, ça a "bouclé" : le résultat est en fait 2647743996 + MAX qui est bien égal à 6942711292.




    Normalement ton code devrait d'ailleurs lancer une EXCEPTION_INT_OVERFLOW.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    38
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Avril 2004
    Messages : 38
    Par défaut
    Super réponse !

    Merci à vous. Plus qu'à utiliser une variable "+ grande"

    Très clair

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

Discussions similaires

  1. afficher un unsigned int
    Par m0ul3sh0t dans le forum C
    Réponses: 10
    Dernier message: 13/11/2007, 14h39
  2. unsigned int dans un vector
    Par Mindiell dans le forum SL & STL
    Réponses: 6
    Dernier message: 12/09/2007, 11h07
  3. Réponses: 1
    Dernier message: 15/02/2007, 17h32
  4. int, unsigned int, et la fonction pow
    Par salseropom dans le forum C
    Réponses: 11
    Dernier message: 22/12/2006, 17h53
  5. [WMI] Variant de type Unsigned Int 64 ...
    Par phplive dans le forum API, COM et SDKs
    Réponses: 3
    Dernier message: 09/05/2006, 20h15

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