Heim > Backend-Entwicklung > Golang > Warum unterscheidet sich das Format „%x' für -1 in Go und C?

Warum unterscheidet sich das Format „%x' für -1 in Go und C?

Patricia Arquette
Freigeben: 2024-11-29 21:22:11
Original
877 Leute haben es durchsucht

Why Does `%x` Format Differ for -1 in Go and C?

Widersprüchliche hexadezimale Formatierung in Go und C: Vorzeichen- und vorzeichenlose Ganzzahlen verstehen

In der Welt der Programmierung kann die Formatierung ganzzahliger Werte manchmal zu Überraschungen führen. Ein solcher Fall tritt auf, wenn 64-Bit-Ganzzahlen als hexadezimale Abweichungen in Go und C gedruckt werden.

Das Problem

Wie das Beispiel zeigt, wird der Formatbezeichner %x verwendet Der ganzzahlige Wert -1 in Go ergibt „-1“, während in C die erwartete Ausgabe „ffffffffffffffff“ wäre. Diese Diskrepanz ergibt sich aus dem grundlegenden Unterschied in der Art und Weise, wie Go und C mit vorzeichenbehafteten und vorzeichenlosen Ganzzahlen umgehen.

Gos Ansatz

Go hält sich strikt an die Typsicherheit. Beim Formatieren eines ganzzahligen Werts wird dieser standardmäßig als vorzeichenbehaftete Ganzzahl dargestellt, auch wenn der Eingabewert die negative Darstellung einer großen vorzeichenlosen Ganzzahl ist. Der %x-Formatbezeichner in Go formatiert den numerischen Wert und nicht seine Speicherdarstellung.

C-Ansatz

Im Gegensatz dazu erzwingt C keine strikte Typsicherheit. Die %x-Konvertierung in C formatiert normalerweise die Speicherdarstellung des Ganzzahlwerts, der im Fall einer negativen Ganzzahl als positive Ganzzahl ohne Vorzeichen mit äquivalenten Bits interpretiert wird.

Die Lösung in Go

Um das gewünschte Verhalten in Go zu erreichen, ist es notwendig, die vorzeichenbehaftete Ganzzahl explizit in eine vorzeichenlose Ganzzahl umzuwandeln, bevor der Formatbezeichner %x angewendet wird. Dies kann mit der uint-Typumwandlung erfolgen:

fmt.Printf("%d %x %d %x", -1, -1, uint(-1), uint(-1))
Nach dem Login kopieren

Ausgabe:

-1 -1 18446744073709551615 ffffffffffffffff
Nach dem Login kopieren

Rob Pikes Argumentation

Das Standardverhalten der Darstellung Negative Zahlen in ihrer vorzeichenbehafteten Form in Go zu verwenden, war eine bewusste Entscheidung von Rob Pike. Seine Begründung war, dass es kürzere Darstellungen negativer Zahlen ermöglicht und sicherstellt, dass alle Ganzzahlformatspezifizierer (%b, %o, %d, %x) ihre Argumente konsistent behandeln.

Das obige ist der detaillierte Inhalt vonWarum unterscheidet sich das Format „%x' für -1 in Go und C?. 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