Maison >développement back-end >Golang >Comment détecter un débordement d'entier dans Go ?
Détection d'un dépassement d'entier dans Go
Un dépassement d'entier se produit lorsque le résultat d'une opération arithmétique dépasse la valeur maximale ou minimale représentable par le type de données . Dans Go, les entiers sont représentés à l'aide d'entiers signés ou non signés, les 32 bits et 64 bits étant les plus courants.
Pour détecter un dépassement d'entier, la méthode "correcte" est de comparer le résultat avec le maximum ou valeur minimale pour le type de données. Par exemple, pour une addition de 32 bits, un débordement se produit si la somme de deux entiers positifs dépasse la valeur maximale (2^31 - 1) ou si la somme de deux entiers négatifs est inférieure à la valeur minimale (-2^31).
Considérons le code suivant :
a, b := 2147483647, 2147483647 // 32-bit integers c := a + b
Pour vérifier si c a débordé, on peut le comparer à l'entier maximum de 32 bits :
if c > math.MaxInt32 { // Integer overflow occurred }
De même, pour Addition de 64 bits, un débordement se produit si la somme de deux entiers positifs dépasse la valeur maximale (2^63 - 1) ou si la somme de deux entiers négatifs est inférieure à la valeur minimale (-2^63). La vérification serait :
if c > math.MaxInt64 { // Integer overflow occurred }
Une approche alternative consiste à utiliser une gestion personnalisée des erreurs. Nous pouvons définir une variable d'erreur et la mettre à zéro s'il n'y a pas de débordement :
var errOverflow error if right > 0 { if left > math.MaxInt32-right { errOverflow = errors.New("integer overflow") } } else { if left < math.MinInt32-right { errOverflow = errors.New("integer overflow") } }
Ensuite, nous pouvons vérifier la variable d'erreur après l'opération :
if errOverflow != nil { // Integer overflow occurred }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!