ホームページ  >  記事  >  バックエンド開発  >  Go と C で `%x` の書式設定で -1 の異なる 16 進表現が出力されるのはなぜですか?

Go と C で `%x` の書式設定で -1 の異なる 16 進表現が出力されるのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-19 12:07:03649ブラウズ

Why Does `%x` Formatting Output Different Hexadecimal Representations for -1 in Go and C?

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。