Beim Drucken eines Ganzzahlwerts von -1 mit dem Formatbezeichner „%x“ verhalten sich Go und C unterschiedlich. In Go ist die Ausgabe „-1“, während sie in C wie erwartet „fffffffffffffff“ ist.
Gos Verhalten
Go berücksichtigt die „%x " Formatbezeichner zur Darstellung des Werts der Zahl in hexadezimaler Schreibweise, unabhängig davon, ob er negativ ist. Für -1 ist der Hexadezimalwert also „-ff“.
Verhalten von C
Im Gegensatz dazu druckt C Speicherdarstellungen von Ganzzahlen mit „%x“. Spezifizierer. Da -1 normalerweise in Zweierkomplementform gespeichert wird, lautet seine hexadezimale Darstellung im Speicher „fffffffffffffff“.
Vereinheitlichen des Verhaltens mit Typkonvertierungen
Um ein C-ähnliches Verhalten zu erreichen In Go muss man die vorzeichenbehaftete Ganzzahl explizit in ihr vorzeichenloses Äquivalent konvertieren, bevor man den Formatbezeichner „%x“ anwendet. Zum Beispiel:
i := -1 // type int fmt.Printf("%x", uint(i)) // prints "fffffffffffffff"
Begründung für Gos Standardverhalten
Rob Pike, ein Go-Entwickler, erklärt die Gründe für Gos Standardverhalten:
" Warum ist das nicht die Standardeinstellung [das vorzeichenlose Format]? Denn wenn es so wäre, gäbe es keine Möglichkeit, etwas als negative Zahl auszugeben, was, wie Sie sehen, eine viel kürzere Darstellung ist.“
Das obige ist der detaillierte Inhalt vonWarum gibt Go bei Verwendung von „%x' negative Ganzzahlen als „-ff' aus, während C „fffffffffffffff' ausgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!