Heim > Backend-Entwicklung > Golang > Warum führt die hexadezimale Ausgabe von -1 in Go und C zu unterschiedlichen Ergebnissen?

Warum führt die hexadezimale Ausgabe von -1 in Go und C zu unterschiedlichen Ergebnissen?

Mary-Kate Olsen
Freigeben: 2024-11-16 00:58:03
Original
257 Leute haben es durchsucht

Why does printing -1 as hexadecimal in Go and C produce different results?

Verstehen der Unterschiede beim Hexadezimaldruck zwischen Go und C: Der Fall von -1

In Go repräsentiert das %x-Format zum Drucken von Ganzzahlen das Wert in hexadezimaler Schreibweise. Dies unterscheidet sich von Cs %x, das die Speicherdarstellung einer vorzeichenbehafteten Ganzzahl ausgibt. Dieser Unterschied führt zu unerwarteten Ergebnissen beim Drucken der negativen Ganzzahl -1.

In Go:

var x uint64 = 1 << 64 - 1
fmt.Printf("%x\n", x)
Nach dem Login kopieren

Ausgabe:

ffffffffffffffffffff
Nach dem Login kopieren

Hier gibt %x korrekt aus Hexadezimale Darstellung des vorzeichenlosen Werts 1<<64 - 1.

In C:

#include <stdio.h>
int main() {
  uint64_t x = 1LL << 64 - 1;
  printf("%x\n", (long long)x);
}
Nach dem Login kopieren

Ausgabe:

-1
Nach dem Login kopieren

In C gibt %x den aus Ganzzahlwert mit Vorzeichen -1, was scheinbar zu einer negativen Hexadezimalzahl mit einem führenden „-“ führt. Dies ist jedoch nicht der Fall; Das „-“-Zeichen zeigt an, dass die Ganzzahl negativ ist, und der Hexadezimalwert ffff...ff ist die Zweierkomplementdarstellung von -1.

Go erzwingt eine strikte Typisierung und erfordert explizite Typkonvertierungen, um vorzeichenbehaftete Ganzzahlen als zu behandeln ohne Vorzeichen. So geben Sie -1 als vorzeichenlosen Wert in Go aus:

i := -1 // type int
fmt.Printf("%x", uint(i))
Nach dem Login kopieren

Ausgabe:

ffffffff
Nach dem Login kopieren

Dieser Ansatz wandelt die vorzeichenbehaftete Ganzzahl -1 in ihr vorzeichenloses Gegenstück um, was zur korrekten hexadezimalen Darstellung führt .

Das Standardverhalten von Go zum Drucken negativer Ganzzahlen als vorzeichenbehaftete Werte ermöglicht eine prägnante Darstellung, kann jedoch in hexadezimalen Kontexten zu unerwarteten Ergebnissen führen. Das Verständnis dieser Unterschiede ist entscheidend für das effektive Schreiben von Code in Go.

Das obige ist der detaillierte Inhalt vonWarum führt die hexadezimale Ausgabe von -1 in Go und C zu unterschiedlichen Ergebnissen?. 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