7

次のコードの問題:

var x uint64 = 18446744073709551615
var y int64 = int64(x)

です。y_ -1情報を失うことなく、これら 2 つの数値型を変換してエンコーダとデコーダを使用する唯一の方法はありますか?

buff bytes.Buffer
Encoder(buff).encode(x)
Decoder(buff).decode(y)

あなたの典型的なケースでは、私は単純な数値変換を試みていないことに注意してください。私は、乱数ジェネレーターの統計的特性を維持することに関心があります。

4

3 に答える 3

15

変換で情報が失われることはありません。すべてのビットは変更されません。それだけです:

uint64(18446744073709551615) = 0xFFFFFFFFFFFFFFFF
int64(-1)                    = 0xFFFFFFFFFFFFFFFF

試す:

var x uint64 = 18446744073709551615 - 3

そして、あなたは持っていy = -4ます。


例:遊び場

var x uint64 = 18446744073709551615 - 3
var y int64 = int64(x)
fmt.Printf("%b\n", x)
fmt.Printf("%b or %d\n", y, y)

出力:

1111111111111111111111111111111111111111111111111111111111111100
-100 or -4
于 2014-11-13T14:49:55.097 に答える