Wie erkennt man einen Ganzzahlüberlauf in Go?

Susan Sarandon
Freigeben: 2024-11-06 18:35:03
Original
512 Leute haben es durchsucht

How to Detect Integer Overflow in Go?

Erkennen eines Ganzzahlüberlaufs in Go

Ein Ganzzahlüberlauf tritt auf, wenn das Ergebnis einer arithmetischen Operation den durch den Datentyp darstellbaren Maximal- oder Minimalwert überschreitet . In Go werden Ganzzahlen durch vorzeichenbehaftete oder vorzeichenlose Ganzzahlen dargestellt, wobei 32-Bit und 64-Bit am häufigsten vorkommen.

Um einen Ganzzahlüberlauf zu erkennen, besteht die „richtige“ Methode darin, das Ergebnis mit dem Maximum oder zu vergleichen Mindestwert für den Datentyp. Beispielsweise tritt bei der 32-Bit-Addition ein Überlauf auf, wenn die Summe zweier positiver Ganzzahlen den Maximalwert (2^31 - 1) überschreitet oder wenn die Summe zweier negativer Ganzzahlen kleiner als der Minimalwert (-2^31) ist.

Betrachten Sie den folgenden Code:

a, b := 2147483647, 2147483647 // 32-bit integers
c := a + b
Nach dem Login kopieren

Um zu überprüfen, ob c übergelaufen ist, können wir ihn mit der maximalen 32-Bit-Ganzzahl vergleichen:

if c > math.MaxInt32 {
    // Integer overflow occurred
}
Nach dem Login kopieren

Ähnlich für Bei der 64-Bit-Addition tritt ein Überlauf auf, wenn die Summe zweier positiver Ganzzahlen den Maximalwert (2^63 - 1) überschreitet oder wenn die Summe zweier negativer Ganzzahlen kleiner als der Minimalwert (-2^63) ist. Die Prüfung wäre:

if c > math.MaxInt64 {
    // Integer overflow occurred
}
Nach dem Login kopieren

Ein alternativer Ansatz besteht darin, eine benutzerdefinierte Fehlerbehandlung zu verwenden. Wir können eine Fehlervariable definieren und sie auf Null setzen, wenn kein Überlauf vorliegt:

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")
    }
}
Nach dem Login kopieren

Dann können wir die Fehlervariable nach der Operation überprüfen:

if errOverflow != nil {
    // Integer overflow occurred
}
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWie erkennt man einen Ganzzahlüberlauf in Go?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!