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
Libérer: 2024-11-19 12:07:03
original
680 Les gens l'ont consulté

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))
Copier après la connexion

Cela donne le résultat :

-1 -1 4294967295 ffffffff
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal