一尘不染

前往:将uint64转换为int64而不会丢失信息

go

以下代码存在问题:

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

是,y-1。在不丢失信息的情况下,在这两种数字类型之间进行转换以使用编码器和解码器的唯一方法是吗?

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

注意,在您的典型情况下,我不尝试直接进行数值转换。我更关心维护随机数生成器的统计属性。


阅读 460

收藏
2020-07-02

共1个答案

一尘不染

看到-1与以32位运行的进程一致。

例如,请参阅Go1.1发行说明(已引入uint64

x := ^uint32(0) // x is 0xffffffff
i := int(x)     // i is -1 on 32-bit systems, 0xffffffff on 64-bit
fmt.Println(i)

使用fmt.Printf("%b\n",y)可以帮助您查看发生了什么

事实证明,OP实战程序([在注释中]确认它最初以32位运行(因此,此答案),但是无论如何,然后意识到184467440737095516150xffffffffffffffff(-1):请参见ANisus答案;

2020-07-02