Maison > Article > développement back-end > Pourquoi fmt.Printf affiche-t-il des représentations binaires incorrectes pour les entiers signés dans Go ?
Question originale :
Lorsque vous essayez d'imprimer la représentation binaire de un entier signé, fmt.Printf produit une sortie qui diffère de la valeur attendue du complément à deux.
Analyse :
Le complément à deux est la technique utilisée par les ordinateurs pour représenter en interne les nombres signés. entiers. Par exemple, -5 serait représenté par 1111 1011. Cependant, fmt.Printf, lorsqu'il est utilisé avec un entier signé, produit un résultat inattendu. Cependant, la conversion en un entier non signé donne la représentation binaire correcte.
Explication :
Le comportement observé n'est pas dû à la représentation interne de l'entier. C'est plutôt le résultat de la façon dont fmt.Printf formate les nombres binaires.
La fonction fmt.integer, utilisée par fmt.Printf, convertit les entiers signés négatifs en valeurs positives avant le formatage. Il en résulte que la valeur binaire de la valeur absolue est précédée d'un signe -.
Exemple :
<code class="go">var i int8 = -5 fmt.Printf("%b", i) // Outputs: -101 (Incorrect)</code>
Dans cet exemple, -5 est converti en 5 en binaire, qui est ensuite précédé d'un ., ce qui donne -101.
Résolution :
Pour obtenir la représentation binaire correcte d'un entier signé, on peut convertir convertissez-le en un entier non signé, puis utilisez fmt.Printf pour imprimer la représentation binaire.
<code class="go">var i int8 = -5 var u uint8 = uint8(i) fmt.Printf("%b", u) // Outputs: 1111 1011 (Correct)</code>
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!