Maison  >  Article  >  développement back-end  >  Pourquoi Go imprime-t-il les entiers négatifs sous la forme \"-ff\" alors que C imprime \"fffffffffffffff\" lors de l'utilisation de \"%x\" ?

Pourquoi Go imprime-t-il les entiers négatifs sous la forme \"-ff\" alors que C imprime \"fffffffffffffff\" lors de l'utilisation de \"%x\" ?

Susan Sarandon
Susan Sarandonoriginal
2024-11-18 09:41:02952parcourir

Why Does Go Print Negative Integers as

Impression d'entiers hexadécimaux négatifs dans Go vs. C

Lors de l'impression d'une valeur entière de -1 à l'aide du spécificateur de format "%x", Go et C se comportent différemment. En Go, la sortie est "-1", tandis qu'en C, elle est "fffffffffffffff", comme prévu.

Le comportement de Go

Go considère le "%x " Spécificateur de format pour représenter la valeur du nombre en notation hexadécimale, qu'il soit négatif ou non. Ainsi, pour -1, la valeur hexadécimale est "-ff".

Comportement de C

En revanche, C imprime les représentations en mémoire d'entiers en utilisant le "%x" spécificateur. Étant donné que -1 est généralement stocké sous la forme du complément à 2, sa représentation hexadécimale en mémoire est "ffffffffffffffff".

Unifier le comportement avec les conversions de types

Pour obtenir un comportement de type C dans Go, il faut explicitement convertir l'entier signé en son équivalent non signé avant d'appliquer le spécificateur de format "%x". Par exemple :

i := -1 // type int
fmt.Printf("%x", uint(i)) // prints "fffffffffffffff"

Raison d'être du comportement par défaut de Go

Rob Pike, un développeur Go, explique le raisonnement derrière le comportement par défaut de Go :

" Pourquoi n'est-ce pas le format par défaut [le format non signé] ? Parce que si c'était le cas, il n'y aurait aucun moyen d'imprimer quelque chose sous forme de nombre négatif, ce qui, comme vous pouvez le voir, est une représentation beaucoup plus courte."

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