ホームページ >バックエンド開発 >Golang >情報を失わずに uint64 を int64 に変換するにはどうすればよいでしょうか?

情報を失わずに uint64 を int64 に変換するにはどうすればよいでしょうか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-28 14:37:30562ブラウズ

How Can You Convert a uint64 to an int64 Without Losing Information?

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

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