Maison > développement back-end > Golang > Pourquoi l'impression de -1 en hexadécimal en Go et C produit-elle des résultats différents ?

Pourquoi l'impression de -1 en hexadécimal en Go et C produit-elle des résultats différents ?

Mary-Kate Olsen
Libérer: 2024-11-16 00:58:03
original
236 Les gens l'ont consulté

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

Comprendre les différences d'impression hexadécimale entre Go et C : le cas de -1

En Go, le format %x pour l'impression d'entiers représente le valeur en notation hexadécimale. Ceci est distinct du %x de C, qui imprime la représentation en mémoire d'un entier signé. Cette différence conduit à des résultats inattendus lors de l'impression de l'entier négatif -1.

En Go :

var x uint64 = 1 << 64 - 1
fmt.Printf("%x\n", x)
Copier après la connexion

Sortie :

ffffffffffffffffffff
Copier après la connexion

Ici, %x imprime correctement le représentation hexadécimale de la valeur non signée 1<<64 - 1.

Dans C :

#include <stdio.h>
int main() {
  uint64_t x = 1LL << 64 - 1;
  printf("%x\n", (long long)x);
}
Copier après la connexion

Sortie :

-1
Copier après la connexion

En C, %x imprime la valeur entière signée -1, ce qui semble donner un nombre hexadécimal négatif avec un « - » en tête. Cependant, ce n’est pas le cas ; le signe '-' indique que l'entier est négatif et la valeur hexadécimale ffff...ff est la représentation en complément à 2 de -1.

Go applique un typage strict, nécessitant des conversions de type explicites pour traiter les entiers signés comme non signé. Pour imprimer -1 en tant que valeur non signée dans Go :

i := -1 // type int
fmt.Printf("%x", uint(i))
Copier après la connexion

Sortie :

ffffffff
Copier après la connexion

Cette approche convertit l'entier signé -1 en son homologue non signé, ce qui donne la représentation hexadécimale correcte .

Le comportement par défaut de Go pour imprimer des entiers négatifs sous forme de valeurs signées permet une représentation concise, mais cela peut conduire à des résultats inattendus dans contextes hexadécimaux. Comprendre ces différences est crucial pour une écriture de code efficace dans Go.

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