Maison > Article > développement back-end > Pourquoi fmt.Printf affiche-t-il une représentation binaire différente pour les entiers signés dans 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)
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)
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!