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
Mary-Kate OlsenOriginal
2024-11-16 00:58:03245Durchsuche

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)

Ausgabe:

ffffffffffffffffffff

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);
}

Ausgabe:

-1

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

Ausgabe:

ffffffff

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!

Stellungnahme:
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