Go および C における 64 ビット整数 -1 の 16 進表現を理解する
Go および C では、%x 形式が使用されます。整数を 16 進数で表示します。ただし、負の 64 ビット整数 -1 に適用すると発散が発生します。
Go では、%x は負の値を保持し、「-1」を表示しますが、C は「ffffffffffffffff」を出力します。この相違は、Go の厳密な型処理に起因します。
Go で -1 の 16 進表現を符号なし整数として出力するには、明示的な変換が必要です。これを uint に変換すると、値が符号なし型として解釈されるようになります。
fmt.Printf("%d %x %d %x", i, i, uint(i), uint(i))
これにより、次の出力が得られます。
-1 -1 4294967295 ffffffff
2 番目の 16 進値 ("ffffffffff") は、符号なし整数として扱われる場合の -1 の 2 の補数。
この背後にある理論的根拠Rob Pike が説明したように、この動作は、負の数値をコンパクトな形式で出力する機能を保持することです。 %x 形式が常に引数を符号なしとして扱う場合、負の値を表示する簡単な方法はありません。
以上がGo と C で `%x` の書式設定で -1 の異なる 16 進表現が出力されるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。