Sujet de la discussionPosté le 04/09/2017 à 20:53:309223372036854775807 + 1 = - 9223372036854775808 ?????
Bonsoir,
Sur la calculatrice programmeur de mon Windows 10, j'ai rentré la valeur 9223372036854775807, la valeur absolue exprimable en 64 bits (7FFF FFFF FFFF FFFF ou bien 0111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111 1111).
Sauf que je me suis dis si on fait 9223372036854775807 + 1, ça plante?
Ben non en fait, ça me donne -9223372036854775808
Oui, -1*(9223372036854775807 + 1)
Ou bien la valeur 8000 0000 0000 0000 / 1000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000.
Pourquoi ce résultat? La valeur héxadécimale/octet après 7FFF FFFF FFFF FFFF revient au stade minimum?
Et puis, dans la logique je me suis dis: si il arrive à calculer et afficher la valeur -9223372036854775808, que se passe t-il si on rentre la valeur -9223372036854775808 ?
Et ben ça rentre pas ???!!!
Pourtant si je fais -9223372036854775807 - 1, ca me donne -9223372036854775808, et si je soustrais -1...
9223372036854775807 !
Etonnant? :D
Quelqu'un peut m'expliquer?
[ Dernière édition du message le 04/09/2017 à 20:54:13 ]
Anonyme
2287
2Posté le 04/09/2017 à 21:09:50
Hep....m'dame Marcelle, une tournée de blancass.... c'est los teignos qui régale....
[ Dernière édition du message le 04/09/2017 à 21:10:08 ]
Anonyme
56
3Posté le 04/09/2017 à 21:13:30
Cette inversion des 0 et des 1 de ton exemple ne t'étonnera plus une fois admis que les nombres négatifs sont représentés en complément à 2.
Je déteste donner des liens vers Wikipedia en guise d'explication, mais là, difficile de faire autrement : https://fr.wikipedia.org/wiki/Compl%C3%A9ment_%C3%A0_deux
A la vôtre ...
Oui, c'est bien la façon standard de représenter les nombres entiers dans les ordinateurs (en l'occurrence sur 64 bits, mais autrefois c'était 32 ou 16 ...)
Le rebouclage sur les nombres négatifs en cas d'overflow est parfaitement normal.
Pour représenter des nombres très grands ou très petits, avec une précision relative, on utilise les nombres en virgule flottante.