登录
首页 >  Golang >  Go问答

在不丢失信息的情况下将 uint64 转换为 int64

来源:Golang技术栈

时间:2023-04-24 14:24:31 269浏览 收藏

学习Golang要努力,但是不要急!今天的这篇文章《在不丢失信息的情况下将 uint64 转换为 int64》将会介绍到golang等等知识点,如果你想深入学习Golang,可以关注我!我会持续更新相关文章的,希望对大家都能有所帮助!

问题内容

以下代码的问题:

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

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

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

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

正确答案

看到 -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)可以帮助查看发生了什么(请参阅ANisus回答

事实证明,OP wheaties确认([在评论中](https://stackoverflow.com/questions/26910696/go- convert-uint64-to-int64-without-loss-of- information/26911142#comment42372921_26911142))它最初以 32 位运行(因此是这个答案),但随后意识到无论如何18446744073709551615都是0xffffffffffffffff(-1):见ANisus答案

理论要掌握,实操不能落!以上关于《在不丢失信息的情况下将 uint64 转换为 int64》的详细介绍,大家都掌握了吧!如果想要继续提升自己的能力,那么就来关注golang学习网公众号吧!

声明:本文转载于:Golang技术栈 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>