为了账号安全,请及时绑定邮箱和手机立即绑定

故意 int 溢出

故意 int 溢出

Go
Cats萌萌 2021-12-07 09:25:44
我正在使用哈希函数murmur2,它返回一个uint64.然后我想将它存储在仅支持BIGINT(有符号 64 位)的PostgreSQL 中。因为我对数字本身不感兴趣,而只是对二进制值感兴趣(因为我将它用作 id 来检测唯一性(我的一组值约为 1000 个值,64 位哈希对我来说就足够了)我想int64通过“只是”更改类型将其转换为。如何以一种令编译器满意的方式做到这一点?
查看完整描述

1 回答

?
ibeautiful

TA贡献1993条经验 获得超5个赞

您可以简单地使用类型转换:


i := uint64(0xffffffffffffffff)

i2 := int64(i)

fmt.Println(i, i2)

输出:


18446744073709551615 -1

转换uint64为int64总是成功:它不会只改变类型的内存表示。如果您尝试将无类型整数常量值转换为int64:


i3 := int64(0xffffffffffffffff) // Compile time error!

这是一个编译时错误,因为常量值0xffffffffffffffff(以任意精度表示)不适合,int64因为适合的最大值int64是0x7fffffffffffffff:


constant 18446744073709551615 overflows int64


查看完整回答
反对 回复 2021-12-07
  • 1 回答
  • 0 关注
  • 173 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信