Diskrepanz beim Hexadezimaldruck zwischen Go und C
In der Programmiersprache Go wird eine 64-Bit-Ganzzahl -1 im %x-Format gedruckt ergibt „-1“. In der C-Sprache würde das gleiche Format jedoch „ffffffffffffffff“ für eine positive ganze Zahl ausgeben. Dieses Verhalten mag auf den ersten Blick kontraintuitiv erscheinen, aber es ergibt sich aus dem grundlegenden Unterschied in der Art und Weise, wie Go und C mit der Ganzzahldarstellung umgehen.
In Go stellt das %x-Verb für Ganzzahlen den Wert der Zahl mithilfe der hexadezimalen Darstellung dar. Für negative Zahlen wie -1 ist die hexadezimale Darstellung „-ff“. Dies entspricht der Go-Konvention, immer explizit basierend auf dem Typ zu formatieren. Um eine vorzeichenbehaftete Ganzzahl als vorzeichenlosen Wert auszugeben, muss sie explizit konvertiert werden.
Zum Beispiel:
i := -1 // type int fmt.Printf("%x", i) // prints "-1" fmt.Printf("%x", uint(i)) // prints "ffffffffffffffff"
Dieses Verhalten gewährleistet eine konsistente Darstellung über verschiedene Typen hinweg.
Die Die Gründe für dieses Standardverhalten bei negativen Zahlen wurden von Rob Pike erklärt:
„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 bedeutet, dass Go bei seinen Formatierungskonventionen auf Kürze und Klarheit Wert legt. Obwohl es unerwartet sein mag, auf vorzeichenbehaftete Hexadezimalzahlen zu stoßen, entspricht es Gos Schwerpunkt auf Explizitheit und Typsicherheit.
Das obige ist der detaillierte Inhalt vonWarum gibt Go -1 als „-1' im Hex-Format aus, während C „ffffffffffffffff' ausgibt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!