Introduction
Le problème de dépassement d'entier. S'il déborde, il va revenir à la valeur minimale et continue à partir de là. Si il underflows, il va revenir à la valeur maximale et continue à partir de là. L'image ci-dessous est un compteur kilométrique. Je l'utilise pour expliquer les débordements. C'est une mécanique de débordement, mais un bon exemple encore.
Dans un Odomètre, l' max digit = 9
, afin d'aller au-delà du maximum de moyens 9 + 1
, qui transporte plus et donne un 0
; Cependant, il n'est pas plus élevé chiffres de changer pour un 1
, le compteur se réinitialise zero
. Vous avez l'idée - "débordements d'entiers" viennent à l'esprit maintenant.
Le plus grand décimal littéral de type int est 2 147 483 647 (231-1). Tous
virgule des littéraux de 0 à 2 147 483 647 peut apparaître n'importe où int
littérale peut apparaître, mais le littéral 2147483648 pourrait n'apparaître que comme l'
opérande de l'opérateur de négation unaire -.
Si un nombre entier plus les débordements, alors le résultat est le faible commande
bits de mathématiques de la somme représentée dans certaines suffisamment grand
en complément à deux sur format. Si le dépassement se produit, alors le signe de la
le résultat n'est pas le même que le signe de la mathématique somme des deux
opérande valeurs.
Ainsi, 2147483647 + 1
déborde et s'enroule autour d' -2147483648
. Par conséquent int i=2147483647 + 1
serait débordé, ce qui n'est pas égal à 2147483648
. Aussi, dites-vous "c'est toujours affiche "0". Il ne le fait pas, parce que http://ideone.com/WHrQIW. Ci-dessous, ces 8 chiffres montrent que le point auquel il pivots et les débordements. Il commence alors à imprimer 0s. Aussi, ne soyez pas surpris comment rapidement il calcule, les machines d'aujourd'hui sont rapides.
268435456
536870912
1073741824
-2147483648
0
0
0
0
Pourquoi débordement d'entier ", s'enroule autour de"
PDF Original