Maison >développement back-end >Golang >Comment détecter un débordement d'entier dans Go ?

Comment détecter un débordement d'entier dans Go ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-06 18:35:03591parcourir

How to Detect Integer Overflow in 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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn