首页 文章

Golang:on-purpose int overflow

提问于
浏览
3

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

我想将它存储在PostgreSQL中,它只支持 BIGINT (带符号的64位) .

因为我对数字本身不感兴趣,只是对二进制值感兴趣(因为我将它用作检测唯一性的id(我的值为~1000值,64位散列对我来说足够了)我想通过改变类型"just"将其转换为 int64 .

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

1 回答

  • 7

    您只需使用conversion类型:

    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
    

相关问题