On-purpose int overflow

前端 未结 1 610
栀梦
栀梦 2020-12-21 06:45

I\'m using the hash function murmur2 which returns me an uint64.

I want then to store it in PostgreSQL, which only support BIGINT

相关标签:
1条回答
  • 2020-12-21 07:09

    You can simply use a type conversion:

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

    Output:

    18446744073709551615 -1
    

    Converting uint64 to int64 always succeeds: it doesn't change the memory representation just the type. What may confuse you is if you try to convert an untyped integer constant value to int64:

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

    This is a compile time error as the constant value 0xffffffffffffffff (which is represented with arbitrary precision) does not fit into int64 because the max value that fits into int64 is 0x7fffffffffffffff:

    constant 18446744073709551615 overflows int64
    
    0 讨论(0)
提交回复
热议问题