Go语言 将两个int32合并为int64

ff29svar  于 2023-08-01  发布在  Go
关注(0)|答案(1)|浏览(133)

我正在尝试写一些函数来连接和分割int32值。我试过这个:

package main

import "math"

func join(a, b int32) int64 {
   return (int64(a) << 32) + int64(b)
}

func split(a int64) (int32, int32) {
   return int32(a >> 32), int32(a & 0xffff_ffff)
}

func main() {
   v := []int32{math.MinInt32, math.MaxInt32}
   for _, a := range v {
      for _, b := range v {
         println(split(join(a, b)))
      }
   }
}

字符串
结果:

2147483647 -2147483648
-2147483648 2147483647
2147483646 -2147483648
2147483647 2147483647


所以除了第一个结果外,其他都是正确的,第一个结果应该是两个负值。是我做错了什么还是这根本不可能

r3i60tvu

r3i60tvu1#

看起来我有正确的拆分函数,但不是连接函数。你需要先转换为uint32,以防止丢失有符号位:

func join(a, b int32) int64 {
   return int64(a) << 32 | int64(uint32(b))
}

字符串
C# - Making one Int64 from two Int32s

相关问题