Warum verursacht die Konvertierung von uint8 in int8 in Go einen Fehler?

Barbara Streisand
Freigeben: 2024-10-30 12:43:02
Original
168 Leute haben es durchsucht

Why does converting a uint8 to int8 in Go cause an error?

Verwirrung Konvertieren von uint8 in int8

Konvertieren einer vorzeichenlosen 8-Bit-Ganzzahl (uint8) in eine vorzeichenbehaftete 8-Bit-Ganzzahl ( int8) kann zu einem Fehler führen. Lassen Sie uns herausfinden, warum.

Betrachten Sie den folgenden Code:

<code class="go">package main

import "fmt"

func main() {
    a := int8(0xfc)  // compile error
    fmt.Println(a)
}</code>
Nach dem Login kopieren

Dieser Code löst einen Fehler bei der Kompilierung aus: „Konstante 252 überläuft int8.“ Um dieses Problem zu verstehen, müssen wir uns auf die Regeln für konstante Ausdrücke von Go beziehen.

Gemäß der Sprachspezifikation müssen konstante Ausdrücke immer durch Werte des konstanten Typs darstellbar sein. In diesem Fall ist 0xfc zu groß, um in einen int8 zu passen, dessen Bereich zwischen -128 und 127 liegt.

Wenn wir die Typkonvertierung wie unten gezeigt verschieben, wird der Code ohne Fehler kompiliert:

<code class="go">package main

import "fmt"

func main() {
    a := 0xfc
    b := int8(a)  // ok
    fmt.Println(b)
}</code>
Nach dem Login kopieren

Dies funktioniert, weil 0xfc als ganzzahliges Literal interpretiert wird, bevor es in ein int8 konvertiert wird. Als Integer-Literal kann es Werte außerhalb des Bereichs von int8 enthalten, aber der Compiler erzwingt die Typprüfung während der eigentlichen Konvertierung.

Einige zusätzliche Punkte zur Integer-Konvertierung in Go:

  • Nicht alle Ganzzahlwerte können in alle Ganzzahltypen passen. Beispielsweise kann int64 keine Werte enthalten, die größer als 9.223.372.036.854.775.807 sind.
  • Vorzeichenlose Ganzzahltypen (uint8, uint16 usw.) können keine negativen Werte enthalten.
  • Zum Konvertieren eines Bytes (ein Alias ​​für uint8) in Wenn Sie einen Ganzzahltyp mit Vorzeichen haben, können Sie das folgende Muster verwenden:
<code class="go">var b byte = 0xff
i32 := int32(int8(b))</code>
Nach dem Login kopieren

Dadurch wird sichergestellt, dass das Vorzeichen des ursprünglichen Bytes erhalten bleibt.

Das obige ist der detaillierte Inhalt vonWarum verursacht die Konvertierung von uint8 in int8 in Go einen Fehler?. 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!