我正在使用哈希函数 murmur2 ,它返回一个 uint64 .
murmur2
uint64
我想将它存储在PostgreSQL中,它只支持 BIGINT (带符号的64位) .
BIGINT
因为我对数字本身不感兴趣,只是对二进制值感兴趣(因为我将它用作检测唯一性的id(我的值为~1000值,64位散列对我来说足够了)我想通过改变类型"just"将其转换为 int64 .
int64
如何以一种令编译器满意的方式做到这一点?
您只需使用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 :
0xffffffffffffffff
0x7fffffffffffffff
constant 18446744073709551615 overflows int64
1 回答
您只需使用conversion类型:
输出:
将
uint64
转换为int64
始终成功:它不会仅更改内存表示类型 . 如果您尝试将无类型的整数常量值转换为int64
,可能会让您感到困惑的是:这是编译时错误,因为常量值
0xffffffffffffffff
(用任意精度表示)不适合int64
,因为适合int64
的最大值是0x7fffffffffffffff
: