Warum schlägt die Konvertierung von uint8 in int8 mit einer Konstante in Go fehl?

Linda Hamilton
Freigeben: 2024-10-31 06:48:01
Original
250 Leute haben es durchsucht

Why Does Converting uint8 to int8 with a Constant Fail in Go?

Verwirrung über die Konvertierung von uint8 in int8

Bei der Konvertierung eines uint8 (vorzeichenlose 8-Bit-Ganzzahl) in einen int8 (vorzeichenbehaftete 8-Bit-Ganzzahl). ), ist das Ergebnis möglicherweise nicht immer wie erwartet. In diesem Artikel werden die Unterschiede zwischen den folgenden beiden Ansätzen untersucht und erklärt, warum der erste einen Kompilierungsfehler auslöst:

<code class="go">a := int8(0xfc) // compile error
// deferring type conversion
a := 0xfc
b := int8(a) </code>
Nach dem Login kopieren

Der Unterschied zwischen den Codes

Der Unterschied zwischen Die beiden Codes liegen in der Reihenfolge der Operationen:

  • Im ersten Beispiel erfolgt die Typkonvertierung (int8(0xfc)). vor der Zuweisung, während im zweiten Beispiel die Zuweisung (a := 0xfc) vor der Typkonvertierung (int8(a)) erfolgt.

Kompilierungsfehler im ersten Code

Der erste Code löst einen Kompilierungsfehler aus, da die Konstante 0xfc den Bereich des Typs int8 überschreitet. int8 kann Werte zwischen -128 und 127 darstellen, während 0xfc den Dezimalwert 252 hat, was diesen Bereich überschreitet. Gemäß der Go-Sprachspezifikation müssen konstante Ausdrücke immer genau durch Werte des konstanten Typs darstellbar sein.

Legale und illegale konstante Ausdrücke

Siehe https:// golang.org/ref/spec#Constant_expressions für eine detaillierte Erklärung der zulässigen und illegalen konstanten Ausdrücke. Der Blogbeitrag unter https://blog.golang.org/constants bietet zusätzliche Einblicke in die Einschränkungen von Ganzzahltypen und die Bedeutung der Typprüfung von Konstanten zum Erkennen von Fehlern.

Lösung des Konvertierungsproblems

Wenn Ihr Ziel darin besteht, ein Byte (das ein uint8 ist) in ein int32 umzuwandeln und dabei dessen Vorzeichen zu berücksichtigen, besteht die empfohlene Vorgehensweise darin, es zunächst in zu konvertieren ein int8 und dann zu einem int32:

<code class="go">var b byte = 0xff
i32 := int32(int8(b)) // -1</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum schlägt die Konvertierung von uint8 in int8 mit einer Konstante in Go fehl?. 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!