Golang的比特位运算符——异或(^),可以用来取整数的反码
^uint(0) :最大无符号整数
int(^uint(0) >> 1) :最大有符号整数
int(^(^uint(0) >> 1)) :最小负整数
package main
import "fmt"
func main() {
uMax := ^uint(0)
fmt.Printf("%#x\n", uMax) //32位机器:0xffffffff ; 64位机器:0xffffffffffffffff
fmt.Println(uMax)
sMax := int(^uint(0) >> 1)
sMin := int(^sMax)
fmt.Printf("%#x\n", sMax) //32位机器:0x7fffffff ; 64位机器:0x7fffffffffffffff
fmt.Println(sMax)
fmt.Printf("%#x\n", sMin)
fmt.Println(sMin)
}
输出:
0xffffffffffffffff
18446744073709551615
0x7fffffffffffffff
9223372036854775807
-0x8000000000000000
-9223372036854775808