英文:
Int overflow on 32-bit systems
问题
这是我的测试函数。
if -1 != cmp(2<<32, keys[2].Distance(keys[5])) {
t.Errorf("2<<32 should be smaller")
}
它导致以下错误:
常量 8589934592 溢出 int
在32位系统上是否有可能使其工作?
编辑:这是用于比较键的 Distance 函数。
// Distance 返回此键空间中的距离度量
func (s *xorKeySpace) Distance(k1, k2 Key) *big.Int {
// 对键进行异或运算
k3 := XOR(k1.Bytes, k2.Bytes)
// 将其解释为整数
dist := big.NewInt(0).SetBytes(k3)
return dist
}
英文:
This is my test function.
if -1 != cmp(2<<32, keys[2].Distance(keys[5])) {
t.Errorf("2<<32 should be smaller")
}
it results in the folllowing error
> constant 8589934592 overflows int
Is it possible to make this work on a 32 bit system?
edit: also this is the Distance function for comparing keys
// Distance returns the distance metric in this key space
func (s *xorKeySpace) Distance(k1, k2 Key) *big.Int {
// XOR the keys
k3 := XOR(k1.Bytes, k2.Bytes)
// interpret it as an integer
dist := big.NewInt(0).SetBytes(k3)
return dist
}
答案1
得分: 1
确保你使用的是64位整数,最好的方法是使用uint64
来确保大小。
type Key int64 // 或者 uint64
假设key
被定义为int
,否则只需将所有函数签名从int
更改为int64
。
英文:
Make sure you work on an 64bit int, the best way is to ensure the size by using uint64
type Key int64 // or uint64
Assuming key is defined to be int, otherwise just change all your function signatures from int
to int64
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论