Heim > Backend-Entwicklung > Golang > Warum gibt Golang bei der Berechnung von Konstanten einen Überlauffehler aus?

Warum gibt Golang bei der Berechnung von Konstanten einen Überlauffehler aus?

DDD
Freigeben: 2024-10-29 19:05:02
Original
810 Leute haben es durchsucht

Why Does Golang Throw an Overflow Error When Calculating Constants?

Golangs konstanten Überlauf mit uint64 verstehen

Problem:

Bedenken Sie den folgenden Golang-Code:

<code class="go">userid := 12345
did := (userid & ^(0xFFFF << 48))</code>
Nach dem Login kopieren

Beim Versuch, diesen Code zu kompilieren, ist ein Fehler aufgetreten:

./xxxx.go:511: constant -18446462598732840961 overflows int
Nach dem Login kopieren

Analyse:

Der Kern dieses Problems liegt in der untypisierten Konstante ^(0xFFFF << 48). Aufgrund des Schiebevorgangs stellt diese Konstante einen sehr großen Wert dar. Wenn die untypisierte Konstante aufgrund der bitweisen Operation mit der Benutzer-ID in ein int konvertiert wird, löst der Compiler einen Überlauffehler aus, da die Konstante den Maximalwert überschreitet, der durch ein int dargestellt werden kann.

Lösung:

Um dieses Problem zu lösen, kann man die untypisierte Konstante explizit in einen Typ umwandeln, der ihrer großen Größe gerecht wird. Beispielsweise kann man den problematischen Ausdruck durch Folgendes ersetzen:

<code class="go">did := (userid & (1<<48 - 1))</code>
Nach dem Login kopieren

In diesem modifizierten Ausdruck ergibt 1<<48 - 1 die Konstante 0x0000ffffffffffff, die durch einen int64-Datentyp dargestellt werden kann. Alternativ kann man int64 explizit im Code verwenden, um die Kompatibilität sowohl mit 32-Bit- als auch mit 64-Bit-Architekturen sicherzustellen:

<code class="go">func main() {
  const userID int64 = 12345
  did := userID & (1<<48 - 1)
  println(did)
}</code>
Nach dem Login kopieren

Durch die Einhaltung dieser Vorschläge können Sie ständige Überläufe in Golang effektiv bewältigen und den Code verwalten Portabilität über verschiedene Architekturen hinweg.

Das obige ist der detaillierte Inhalt vonWarum gibt Golang bei der Berechnung von Konstanten einen Überlauffehler aus?. 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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage