Maison > développement back-end > Golang > le corps du texte

Pourquoi fmt.Printf génère-t-il « -101 » pour un entier signé représenté en complément à deux ?

DDD
Libérer: 2024-11-01 13:31:29
original
265 Les gens l'ont consulté

Why Does fmt.Printf Output

Complément à deux et sortie binaire fmt.Printf

Lorsque les ordinateurs utilisent le complément à deux pour représenter des entiers signés, une valeur telle que -5 est stockée sous le modèle de bits "1111 1011". Cependant, lorsque vous essayez d'imprimer cette représentation binaire à l'aide de fmt.Printf comme ceci :

<code class="go">var i int8 = -5
fmt.Printf("%b", i)</code>
Copier après la connexion

La sortie affiche de manière inattendue "-101". Pourquoi cela se produit-il et le complément à deux est-il utilisé en interne ?

Le problème du formatage binaire

La différence réside dans la façon dont fmt.Printf gère le formatage binaire. Lors du formatage d'un entier signé négatif, il le convertit en une valeur positive, puis ajoute un signe « - » avant la chaîne formatée.

En examinant le code source de fmt.Printf, nous constatons que fmt.integer convertit un entier signé en une valeur positive avant de le formater :

<code class="go">    negative := signedness == signed && a < 0
    if negative {
        a = -a
    }</code>
Copier après la connexion

Sortie non signée ou signée

Pour démontrer cela, considérez ce code :

<code class="go">var u uint8 = uint(i)
fmt.Printf("%b", u)</code>
Copier après la connexion

Ici, nous convertissons i en un entier non signé avant de l'imprimer. Cette fois, la sortie affiche correctement "11111011", qui est le complément à deux de -5.

Conclusion

Pour imprimer correctement la représentation binaire d'un entier signé en utilisant fmt.Printf, nous devons d'abord le convertir en un entier positif en utilisant un type non signé. Cela garantit que fmt.Printf ne convertit pas automatiquement la valeur en valeur négative et n'ajoute pas un signe « - ».

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal