1. 程式人生 > 實用技巧 >一行表示式生成最大的int型別的數

一行表示式生成最大的int型別的數

直接上一段程式碼,這是從go語言原始碼中提取出來的:

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 --> 補碼10000000