首页 > 其他 > 详细

一行表达式生成最大的int类型的数

时间:2020-09-15 12:45:55      阅读:55      评论:0      收藏:0      [点我收藏+]

直接上一段代码,这是从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

一行表达式生成最大的int类型的数

原文:https://www.cnblogs.com/gyyyl/p/13672364.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!