Maison > développement back-end > Golang > Pourquoi fmt.Printf affiche-t-il une représentation binaire différente pour les entiers signés dans Go ?

Pourquoi fmt.Printf affiche-t-il une représentation binaire différente pour les entiers signés dans Go ?

Mary-Kate Olsen
Libérer: 2024-11-03 06:54:30
original
212 Les gens l'ont consulté

Why does fmt.Printf display a different binary representation for signed integers in Go?

Comment fmt.Printf formate les nombres binaires pour les entiers signés

Dans les systèmes informatiques, les entiers signés sont généralement représentés en utilisant la notation complément à deux. Cependant, lorsque vous utilisez fmt.Printf pour imprimer la représentation binaire d'un entier signé, vous pouvez rencontrer des résultats inattendus.

Par exemple, considérons le code suivant :

var i int8 = -5
fmt.Printf("%b", i)
Copier après la connexion

Ce code produit un sortie de "-101", qui n'est pas la représentation attendue en complément à deux de "-5". Cet écart provient de la gestion interne du formatage binaire par fmt.Printf.

Le problème réside dans la conversion de l'entier signé négatif en un entier positif dans fmt.Printf. La fonction inverse le signe de l’entier d’entrée, ce qui en fait effectivement un entier non signé. Par conséquent, fmt.Printf ajoute un signe '-' avant la représentation binaire non signée convertie.

Pour confirmer ce comportement, nous pouvons convertir l'entier signé en un entier non signé et l'imprimer :

var u uint8 = uint(i)
fmt.Printf("%b", u)
Copier après la connexion

Cela donne une sortie de "11111011", qui s'aligne sur la représentation du complément à deux de -5. Par conséquent, bien que la valeur sous-jacente soit effectivement représentée en complément à deux en interne, la fonction fmt.Printf modifie le format lors de la sortie.

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