以下代码存在问题:
var x uint64 = 18446744073709551615 var y int64 = int64(x)
是,y是-1。在不丢失信息的情况下,在这两种数字类型之间进行转换以使用编码器和解码器的唯一方法是吗?
y
-1
buff bytes.Buffer Encoder(buff).encode(x) Decoder(buff).decode(y)
注意,在您的典型情况下,我不尝试直接进行数值转换。我更关心维护随机数生成器的统计属性。
看到-1与以32位运行的进程一致。
例如,请参阅Go1.1发行说明(已引入uint64)
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)可以帮助您查看发生了什么
fmt.Printf("%b\n",y)
事实证明,OP实战程序([在注释中]确认它最初以32位运行(因此,此答案),但是无论如何,然后意识到18446744073709551615是0xffffffffffffffff(-1):请参见ANisus答案;
18446744073709551615
0xffffffffffffffff