bonjour à tous,
j'ai un petit soucis d'addition...
Quelqu'un pour m'expliquer cette bizarerie ?Code:
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
Version imprimable
bonjour à tous,
j'ai un petit soucis d'addition...
Quelqu'un pour m'expliquer cette bizarerie ?Code:
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
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
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.
Super réponse !
Merci à vous. Plus qu'à utiliser une variable "+ grande"
Très clair :ccool: