func main() { // 这个表达式可以得到最大的正的int类型的值 a := int(^uint(0) >> 1) fmt.Println(a)//9223372036854775807 b := uint(0) // 无符号0 fmt.Printf("%b\n", b)//0 c := ^b//取反 fmt.Printf("%b\n", c)// 1111111111111111111111111111111111111111111111111111111111111111 64位1,go中int的字节与操作系统有关 d := c >> 1//右移一位 fmt.Printf("%b\n", d)// 111111111111111111111111111111111111111111111111111111111111111 63位1,最高位为0 e := int(d)//类型转化为有符号int fmt.Printf("%b\n", e)//111111111111111111111111111111111111111111111111111111111111111 63位1,最高位为0 fmt.Println(e)// 9223372036854775807 最大的有符号int fmt.Printf("%b\n", e+1)//-1000000000000000000000000000000000000000000000000000000000000000 1个1,63个0,这是负数的补码,取反加1转化为二进制,前面这个负号是go语言自己加的吧 fmt.Println(e + 1)// -9223372036854775808,最小的有符号int }
其实很好理解,例如对于一个字节的数,比如c
语言的short
类型:
最大值为127
,最小值为-128
127
的二进制:01111111
-128
的二进制:-10000000
-->
补码
原文:https://www.cnblogs.com/gyyyl/p/13672364.html