在32位系统上Int溢出

时间:2014-10-03 19:49:51

标签: go

这是我的测试功能。

if -1 != cmp(2<<32, keys[2].Distance(keys[5])) {
        t.Errorf("2<<32 should be smaller")
    }

导致以下错误

  

常量8589934592溢出int

是否可以在32位系统上运行?

编辑:这也是比较键的距离函数

// 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 个答案:

答案 0 :(得分:1)

确保使用64位int,最好的方法是使用uint64确保大小

type Key int64 // or uint64

假设键被定义为int,否则只需将所有函数签名从int更改为int64