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 ?

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

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-11-03 06:54:30167parcourir

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)

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!

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