Go 故意溢出
我正在使用哈希函数Go 故意溢出,go,type-conversion,integer-overflow,Go,Type Conversion,Integer Overflow,我正在使用哈希函数2,它返回一个uint64 然后我想将其存储在PostgreSQL中,它只支持BIGINT(带符号的64位) 由于我对数字本身不感兴趣,而只对二进制值感兴趣(因为我使用它作为检测唯一性的id(我的一组值约为1000个值,64位哈希对我来说就足够了),所以我想通过“仅仅”更改类型将其转换为int64 如何以令编译器满意的方式实现这一点?您只需使用一个类型: 输出: 18446744073709551615 -1 将uint64转换为int64始终成功:它不会仅更改类型而更改内存
2
,它返回一个uint64
然后我想将其存储在PostgreSQL中,它只支持BIGINT
(带符号的64位)
由于我对数字本身不感兴趣,而只对二进制值感兴趣(因为我使用它作为检测唯一性的id(我的一组值约为1000个值,64位哈希对我来说就足够了),所以我想通过“仅仅”更改类型将其转换为int64
如何以令编译器满意的方式实现这一点?您只需使用一个类型:
输出:
18446744073709551615 -1
将uint64
转换为int64
始终成功:它不会仅更改类型而更改内存表示形式。如果尝试将非类型化的整型常量值转换为int64
,可能会使您感到困惑:
i3 := int64(0xffffffffffffffff) // Compile time error!
这是一个编译时错误,因为常量值0xffffffffffffff
(以任意精度表示)不适合int64
,因为适合int64
的最大值是0x7ffffffffffffff
:
constant 18446744073709551615 overflows int64
好的,是的,我对类型转换是如何工作的有一个错误的印象,谢谢你澄清
constant 18446744073709551615 overflows int64