情報損失なしで uint64 を int64 に変換する
提供されたコードは確かに指定された uint64 値を int64 に変換しますが、結果の値は (- 1) は期待される統計表現ではありません。これは、ビット値が維持されているにもかかわらず、int64 データ型が異なる符号規則でビット値を解釈するためです。
この不一致を回避するには、エンコーダ/デコーダのアプローチを使用して元のビット パターンを保持できます。ただし、
int64 y = int64(x)
を使用した uint64 から int64 への変換では、ビット シーケンスは変更されないことに注意することが重要です。単に符号解釈を適用するだけです。したがって、次の変換:
var x uint64 = 18446744073709551615 var y int64 = int64(x)
は次のようになります:
x = 0xFFFFFFFFFFFFFFFF y = 0xFFFFFFFFFFFFFFFF (as a signed int64)
対照的に、エンコーダ/デコーダのアプローチでは、符号規則に関係なく、ビット表現がそのまま維持されることが保証されます。 .
たとえば、uint64 値を少し変更すると:
var x uint64 = 18446744073709551615 - 3
結果の int64 変換:
var y int64 = int64(x)
は次のようになります:
y = -4
これは、ビット表現が保存され、符号付き整数として正確に解釈されることを示しています。
以上が情報を失わずに uint64 を int64 に変換するにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。