猿问

故意 int 溢出

我正在使用哈希函数murmur2,它返回一个uint64.

然后我想将它存储在仅支持BIGINT(有符号 64 位)的PostgreSQL 中。

因为我对数字本身不感兴趣,而只是对二进制值感兴趣(因为我将它用作 id 来检测唯一性(我的一组值约为 1000 个值,64 位哈希对我来说就足够了)我想int64通过“只是”更改类型将其转换为。

如何以一种令编译器满意的方式做到这一点?


Cats萌萌
浏览 174回答 1
1回答

ibeautiful

您可以简单地使用类型转换: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
随时随地看视频慕课网APP

相关分类

Go
我要回答