一行表示式生成最大的int型別的數
阿新 • • 發佈:2020-09-15
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
-->
補碼