Maison >développement back-end >Golang >Pourquoi le formatage « %x » produit-il des représentations hexadécimales différentes pour -1 en Go et C ?

Pourquoi le formatage « %x » produit-il des représentations hexadécimales différentes pour -1 en Go et C ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-19 12:07:03651parcourir

Why Does `%x` Formatting Output Different Hexadecimal Representations for -1 in Go and C?

Comprendre la représentation hexadécimale d'un entier 64 bits -1 en Go et C

En Go et C, le format %x est utilisé pour imprimer des entiers en notation hexadécimale. Cependant, une divergence apparaît lorsqu'il est appliqué à l'entier négatif de 64 bits -1.

Dans Go, %x préserve la valeur négative, affichant "-1", tandis que C génère "ffffffffffffffff". Cette disparité provient de la gestion stricte des types de Go.

Pour imprimer la représentation hexadécimale de -1 sous forme d'entier non signé dans Go, une conversion explicite est nécessaire. Le convertir en uint garantit que la valeur est interprétée comme un type non signé :

fmt.Printf("%d %x %d %x", i, i, uint(i), uint(i))

Cela donne le résultat :

-1 -1 4294967295 ffffffff

La deuxième valeur hexadécimale ("ffffffffff") représente le Complément de -1 à 2 lorsqu'il est traité comme un entier non signé.

La justification de ce comportement, comme expliqué par Rob Pike, vise à préserver la possibilité d'imprimer des nombres négatifs dans un format compact. Si le format %x traitait toujours les arguments comme non signés, il n'y aurait pas de moyen simple d'afficher des valeurs négatives.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn