Heim > Backend-Entwicklung > Golang > Warum zeigt fmt.Printf falsche binäre Darstellungen für vorzeichenbehaftete Ganzzahlen in Go an?

Warum zeigt fmt.Printf falsche binäre Darstellungen für vorzeichenbehaftete Ganzzahlen in Go an?

Susan Sarandon
Freigeben: 2024-11-03 11:29:29
Original
281 Leute haben es durchsucht

Why Does fmt.Printf Display Incorrect Binary Representations for Signed Integers in Go?

Die Diskrepanz zwischen Zweierkomplement und fmt.Printf

Ursprüngliche Frage:

Beim Versuch, die binäre Darstellung von zu drucken Als vorzeichenbehaftete Ganzzahl erzeugt fmt.Printf eine Ausgabe, die vom erwarteten Zweierkomplementwert abweicht.

Analyse:

Zweierkomplement ist die von Computern verwendete Technik zur internen Darstellung von Vorzeichen ganze Zahlen. Beispielsweise würde -5 als 1111 1011 dargestellt. Allerdings führt fmt.Printf bei Verwendung mit einer vorzeichenbehafteten Ganzzahl zu einem unerwarteten Ergebnis. Die Konvertierung in eine vorzeichenlose Ganzzahl führt jedoch zur korrekten Binärdarstellung.

Erklärung:

Das beobachtete Verhalten ist nicht auf die interne Darstellung der Ganzzahl zurückzuführen. Es ist stattdessen das Ergebnis der Formatierung von Binärzahlen durch fmt.Printf.

Die von fmt.Printf verwendete Funktion fmt.integer wandelt negative vorzeichenbehaftete Ganzzahlen vor der Formatierung in positive Werte um. Dies führt dazu, dass dem Binärwert des Absolutwerts ein - Vorzeichen vorangestellt wird.

Beispiel:

<code class="go">var i int8 = -5
fmt.Printf("%b", i) // Outputs: -101 (Incorrect)</code>
Nach dem Login kopieren

In diesem Beispiel wird -5 in 5 umgewandelt im Binärformat, dem dann ein . vorangestellt wird, was zu -101 führt.

Auflösung:

Um die korrekte binäre Darstellung einer vorzeichenbehafteten Ganzzahl zu erhalten, kann man konvertieren Wandeln Sie es in eine vorzeichenlose Ganzzahl um und verwenden Sie dann fmt.Printf, um die Binärdarstellung zu drucken.

<code class="go">var i int8 = -5
var u uint8 = uint8(i)
fmt.Printf("%b", u) // Outputs: 1111 1011 (Correct)</code>
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum zeigt fmt.Printf falsche binäre Darstellungen für vorzeichenbehaftete Ganzzahlen in Go an?. 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