元の質問:
のバイナリ表現を出力しようとしたとき符号付き整数の場合、fmt.Printf は、予期された 2 の補数の値とは異なる出力を生成します。
分析:
2 の補数は、符号付きを内部的に表現するためにコンピュータで使用される手法です。整数。たとえば、-5 は 1111 1011 と表されます。ただし、fmt.Printf を符号付き整数とともに使用すると、予期しない結果が生成されます。ただし、符号なし整数に変換すると、正しいバイナリ表現になります。
説明:
観察された動作は、整数の内部表現によるものではありません。これは、fmt.Printf による 2 進数のフォーマット方法の結果です。
fmt.Printf で使用される fmt.integer 関数は、フォーマットする前に負の符号付き整数を正の値に変換します。これにより、絶対値のバイナリ値の前に - 記号が追加されます。
例:
<code class="go">var i int8 = -5 fmt.Printf("%b", i) // Outputs: -101 (Incorrect)</code>
この例では、-5 は 5 に変換されます。バイナリで、先頭に . が追加され、結果は -101 になります。
解決策:
符号付き整数の正しいバイナリ表現を取得するには、次のように変換できます。それを符号なし整数に変換し、fmt.Printf を使用してバイナリ表現を出力します。
<code class="go">var i int8 = -5 var u uint8 = uint8(i) fmt.Printf("%b", u) // Outputs: 1111 1011 (Correct)</code>
以上がGo で fmt.Printf が符号付き整数の間違ったバイナリ表現を表示するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。