So verwenden Computer Zweierkomplement, um vorzeichenbehaftete Ganzzahlen intern darzustellen. Dh -5 wird als^5 + 1 = "1111 1011" dargestellt.Golang: Zweierkomplement und fmt.Printf
Versuchen jedoch, die binäre Darstellung zu drucken, z. der folgende Code:
var i int8 = -5
fmt.Printf("%b", i)
Ausgänge -101
. Nicht ganz das, was ich erwarten würde. Ist die Formatierung anders oder verwendet sie nicht das Zweierkomplement?
Interessanterweise wird in dem "richtigen" Bitmuster auf ein unsigned int Ergebnisse Umwandlung:
var u uint8 = uint(i)
fmt.Printf("%b", u)
Ausgang ist 11111011
- genau die 2s Ergänzung von -5
.
So scheint mir der Wert ist intern der wirklich mit Zwei-Komplement, aber die Formatierung druckt die unsigned 5
und eine -
vor.
Kann jemand das klären?
Ich bin mir nicht sicher, warum jemand dieses "komisch" hält. Egal welche Zahlenbasis Sie verwenden, eine negative Zahl ist immer noch negativ. Wenn Sie in der Basis 8, 12 oder 16 danach gefragt hätten, würde ich das Gleiche erwarten. –
Nun, ich habe nicht komisch gesagt. Ich habe nur versucht, 2s Ergänzung zu verstehen und die Ergebnisse waren nicht das, was ich erwartet hatte. – joerx
Ich glaube nicht, dass Sie wirklich hoffen können, das Zweierkomplement zu verstehen, indem Sie mit einer Zahlenformatierungsfunktion spielen, die in einer Hochsprache geschrieben ist. –