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 ?
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!