我正在尝试写一些函数来连接和分割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
型
所以除了第一个结果外,其他都是正确的,第一个结果应该是两个负值。是我做错了什么还是这根本不可能
1条答案
按热度按时间r3i60tvu1#
看起来我有正确的拆分函数,但不是连接函数。你需要先转换为
uint32
,以防止丢失有符号位:字符串
C# - Making one Int64 from two Int32s