• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Golang中的int类型和uint类型到底有多大?

    在开始之前,我们先来看看uint 与 int 的区别

    上面是图,下面是源码:

    package main 
    import ( 
    "fmt" 
    _ "time" 
    ) 
    func main() { 
    a := byte(255) //11111111 这是byte的极限, 因为 a := byte(256)//越界报错, 0~255正好256个数,不能再高了 
    b := uint8(255) //11111111 这是uint8的极限,因为 c := uint8(256)//越界报错,0~255正好256个数,不能再高了 
    c := int8(127) //01111111 这是int8的极限, 因为 b := int8(128)//越界报错, 0~127正好128个数,所以int8的极限只是256的一半 
    d := int8(a) //11111111 打印出来则是-0000001,int8(128)、int8(255)、int8(byte(255))都报错越界,因为int极限是127,但是却可以写:int8(a),第一位拿来当符号了 
    e := int8(c) //01111111 打印出来还是01111111 
    fmt.Printf("%08b %d \n", a, a) 
    fmt.Printf("%08b %d \n", b, b) 
    fmt.Printf("%08b %d \n", c, c) 
    fmt.Printf("%08b %d \n", d, d) 
    fmt.Printf("%08b %d \n", e, e) 
    } 

    引言

    今天调试一个问题,发现一个我无法理解的情况:

    package main
    import (
     "fmt"
     "math"
     "runtime"
    )
    func main() {
     var a uint = math.MaxUint64
     fmt.Println("Hello, playground", a, runtime.Version())
    }

    把64位的数字赋值给uint,我理解uint是32位的,为啥可以编译通过?但是我接着又在 playground 上试了一把,结果是编译不过了:

    constant 18446744073709551615 overflows uint

    int 和 uint 到底占多大空间?

    其实我一直理解是32位的。因为别的语言是这样,惯性思维了。

    直接看一下官方文档:

    int is a signed integer type that is at least 32 bits in size. It is a distinct type, however, and not an alias for, say, int32.

    uint和int情况差不多。翻译一下,就是说这个整形最少占32位,int和int32是两码事。

    再看一下 davecheney 大神的回复(大神半夜回复 GitHub 真是敬业啊):

    uint is a variable sized type, on your 64 bit computer uint is 64 bits wide.

    我的理解uint类型长度取决于 CPU,如果是32位CPU就是4个字节,如果是64位就是8个字节。我的电脑是64位的,而 playground 是32位的,问题就出在这里。

    More

    这里就会出现一个情况,int和uint是根据 CPU 变化的,如何知道当前系统的情况?

    写了这么多年 Golang,int天天用,一直被我当32位处理,说来惭愧。。。

    总结

    以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

    上一篇:使用Go语言解析动态JSON格式的方法
    下一篇:beego获取ajax数据的实例
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Golang中的int类型和uint类型到底有多大? Golang,中的,int,类型,和,uint,