当前位置:  开发笔记 > 编程语言 > 正文

Golang:on-purpose int overflow

如何解决《Golang:on-purposeintoverflow》经验,为你挑选了1个好方法。

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

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

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

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



1> icza..:

您只需使用类型转换:

i := uint64(0xffffffffffffffff)
i2 := int64(i)
fmt.Println(i, i2)

输出:

18446744073709551615 -1

转换uint64int64始终成功:它不会更改内存表示只是类型.如果您尝试将无类型的整数常量值转换为以下内容,可能会让您感到困惑的是int64:

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

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

constant 18446744073709551615 overflows int64

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有