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>
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>
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:
<code class="go">var b byte = 0xff i32 := int32(int8(b))</code>
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!