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>
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>
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!