Go と C の間の 16 進数の出力の不一致
Go プログラミング言語では、%x 形式を使用して 64 ビット整数 -1 を出力します結果は「-1」になります。ただし、C 言語では、同じ形式で正の整数の場合は「ffffffffffffffff」が出力されます。この動作は最初は直観に反しているように思えるかもしれませんが、Go と C が整数表現を処理する方法の根本的な違いに由来しています。
Go では、整数の %x 動詞は 16 進表現を使用して数値の値を表します。 -1 のような負の数値の場合、その 16 進表現は「-ff」です。これは、型に基づいて常に明示的にフォーマットするという Go の規則に従っています。符号付き整数を符号なし値として出力するには、明示的に変換する必要があります。
例:
i := -1 // type int fmt.Printf("%x", i) // prints "-1" fmt.Printf("%x", uint(i)) // prints "ffffffffffffffff"
この動作により、異なる型間で一貫した表現が保証されます。
負の数に対するこのデフォルトの動作の背後にある理由は、Rob Pike によって次のように説明されています。
「なぜなら、もしそうなら、方法はないからです」何かを負の数値として出力します。ご覧のとおり、これは非常に短い表現です。"
これは、Go がその書式設定規則において簡潔さと明瞭さを優先していることを意味します。符号付き 16 進数が登場するのは予期せぬことかもしれませんが、これは Go が強調している明示性と型安全性と一致しています。
以上がC が「ffffffffffffffff」を出力するのに、Go は -1 を 16 進数形式の「-1」として出力するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。