Pour les programmeurs, lors du calcul, concernant le débordement, Je pense que je fais toujours attention Je résumerai brièvement les cas souvent oubliés.
Cet article est un contenu biographique tiré du contenu suivant.
Pour simplifier les choses, supposons un type entier signé 32 bits. Concernant le contenu de cette heure, s'il s'agit d'un type entier signé avec une précision fixe, D'autres tailles devraient également s'appliquer.
En Java, C #, C / C ++ Pensez à int, Int32, int32, etc. (En C / C ++, on suppose que le type int est un système de traitement 32 bits.)
La multiplication de grands nombres est facile à déborder Ce n'est pas le sujet principal car je pense que vous pouvez l'imaginer tout de suite.
Le sujet principal est les cas suivants.
int a = Int32.MinValue;
int b = -1;
int answer = a * b;
int a = Integer.MIN_VALUE;
int b = -1;
int answer = a * b;
int a = INT_MIN;
int b = -1;
int answer = a * b;
«A» contient «-2147483648», La multiplication par "-1" dépasse "2147483647", qui peut être représentée par un entier signé de 32 bits. Dans mon environnement, le résultat de chaque variable «réponse» est «-2147483648». Pour C #, si vous le définissez sur «vérifié», une OverFlowException se produira.
Si la valeur peut être évaluée au moment de la construction ou de la compilation, À ce stade, un débordement peut être détecté.
En division entière, si le dépassement ne se produit pas, Dans certains cas, il peut être mal compris, mais il peut déborder correctement (?!).
int a = Int32.MinValue;
int b = -1;
int answer = a / b;
int a = Integer.MIN_VALUE;
int b = -1;
int answer = a / b;
int a = INT_MIN;
int b = -1;
int answer = a / b;
Similaire à la multiplication, mais
Diviser par «-1» équivaut à multiplier par «-1», donc
Il dépasse «2147483647» qui peut être représenté par un entier signé de 32 bits.
Dans mon environnement, en Java, le résultat de la variable ʻanswer est
-2147483648. En C ++, une exception de dépassement d'entier s'est produite. ** Pour C #, j'obtiens une OverFlowException indépendamment du fait qu'il soit
vérifié` ou non. ** **