Heim >Backend-Entwicklung >Golang >Wie erkennt man einen Ganzzahlüberlauf 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
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 }
Ä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 }
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") } }
Dann können wir die Fehlervariable nach der Operation überprüfen:
if errOverflow != nil { // Integer overflow occurred }
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!