在写一道算法时需要用到int32类型的最大值和最小值,但是查了查在go的标准库中没有定义这些变量,所以当需要使用整数类型的最大值和最小值的时候,我们需要自己手动去定义。
无符号整型uint
其最小值是0,那么二进制表示就是所有位都为0:
const UINT_MIN uint = 0
其最大值二进制表示所有位数表示为1,通过位运算:
const UINT_MAX uint = ^uint(0)
有符号整型int
根据补码,其最大值二进制表示,首位为0,其余位为1:
const INT_MAX = int(^uint(0) >> 1)
根据补码,其最小值二进制表示,首位为1, 其余位为0:
const INT_MIN = ^INT_MAX
需要注意的地方
int类型和uint类型所占用的长度和系统位数有关,在32位系统下,int的长度和int32长度相同,在64位系统下,int的长度和int64长度相同,uint同理。
const (
INT_MAX = int32(^uint32((0)) >> 1)
INT_MIN = ^INT_MAX
)
func main() {
fmt.Println(INT_MAX, INT_MIN)
var a int
var b int32
var c int64
fmt.Println("size of a: ", unsafe.Sizeof(a))
fmt.Println("size of b: ", unsafe.Sizeof(b))
fmt.Println("size of c: ", unsafe.Sizeof(c))
}
输出:
2147483647 -2147483648
size of a: 8
size of b: 4
size of c: 8