Maison > développement back-end > Golang > le corps du texte

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

Susan Sarandon
Libérer: 2024-11-06 18:35:03
original
512 Les gens l'ont consulté

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
Copier après la connexion

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
}
Copier après la connexion

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
}
Copier après la connexion

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")
    }
}
Copier après la connexion

Ensuite, nous pouvons vérifier la variable d'erreur après l'opération :

if errOverflow != nil {
    // Integer overflow occurred
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!