• 技术文章 >后端开发 >Golang

    一文解析Go中Int的最大数值

    藏色散人藏色散人2021-11-15 15:35:21转载760
    本文由go语言教程栏目给大家介绍Go 中 Int 的最大数值 ,希望对需要的朋友有所帮助!

    总结:

    import "math/bits"const (
        MaxUint uint = (1 << bits.UintSize) - 1
        MaxInt int = (1 << bits.UintSize) / 2 - 1
        MinInt int = (1 << bits.UintSize) / -2)

    背景:

    我想你知道,uint类型的大小与uint32uint64相同,具体取决于您所在的平台。通常,只有在没有接近最大值风险的情况下,才会使用无尺寸的版本,因为没有尺寸规格的版本可以使用“本机”类型,这取决于平台,并且它往往更快。

    请注意,更 “快” 是因为使用非本机类型需要处理器执行额外的数学计算和边界检查,以便模拟更大或更小的整数。因此,处理器(或编译器的优化代码)性能会比添加边界检查的代码要好。

    话虽如此,在某些情况下,了解您正在使用的内容仍然很有用。

    “math/bits“ 包中含有以字节为单位的uint大小(译者注:UintSize )。要确定最大值,将 1 左移许多位,再减去 1。即:(1 << bits.UintSize) - 1

    请注意,在计算 uint 的最大值时,您通常需要将其显式放入一个 uint(或更大的类型)类型变量中,否则编译器可能会失败,因为它会默认尝试将该计算分配给一个有符号int(很明显,它不适合),所以:

    const MaxUint uint = (1 << bits.UintSize) - 1

    这是您问题的直接答案,但您可能对一些相关的计算感兴趣。

    根据 spec,uintint 的大小始终相同。

    uint 32 位或 64 位

    intuint 大小相同

    因此,我们也可以使用这个常量来确定 int 的最大值,方法是采用相同的答案并除以 2,然后减去 1。 即:(1 << bits.UintSize) / 2 - 1

    以及 int 的最小值,通过将 1 移位那么多位并将结果除以 -2。 即:(1 << bits.UintSize) / -2

    总之:

    ** MaxUint: ** (1 << bits.UintSize) - 1

    ** MaxInt: ** (1 << bits.UintSize) / 2 - 1

    ** MinInt: ** (1 << bits.UintSize) / -2

    完整示例(应与下图相同):

    package mainimport (
        "fmt"
        "math"
        "math/bits"
        "runtime"
        "strconv")func main() {
        var mi32 int64 = math.MinInt32    var mi64 int64 = math.MinInt64    var i32 uint64 = math.MaxInt32    var ui32 uint64 = math.MaxUint32    var i64 uint64 = math.MaxInt64    var ui64 uint64 = math.MaxUint64    var ui uint64 = (1 << bits.UintSize) - 1
        var i uint64 = (1<<bits.UintSize)/2 - 1
        var mi int64 = (1 << bits.UintSize) / -2
    
        fmt.Printf(" MinInt32: %d\n", mi32)
        fmt.Printf(" MaxInt32:  %d\n", i32)
        fmt.Printf("MaxUint32:  %d\n", ui32)
        fmt.Printf(" MinInt64: %d\n", mi64)
        fmt.Printf(" MaxInt64:  %d\n", i64)
        fmt.Printf("MaxUint64:  %d\n", ui64)
        fmt.Printf("  MaxUint:  %d\n", ui)
        fmt.Printf("   MinInt: %d\n", mi)
        fmt.Printf("   MaxInt:  %d\n", i)
    
        fmt.Println("MaxUint:", uint(math.MaxUint))
        fmt.Println("MinInt:", math.MinInt)
        fmt.Println("MaxInt:", math.MaxInt)
    
        fmt.Println("系统架构:", runtime.Compiler, runtime.GOARCH, runtime.GOOS)
        fmt.Println("Int 大小:", strconv.IntSize)}

    输出:

    MinInt32: -2147483648
     MaxInt32:  2147483647MaxUint32:  4294967295
     MinInt64: -9223372036854775808
     MaxInt64:  9223372036854775807MaxUint64:  18446744073709551615
      MaxUint:  18446744073709551615
       MinInt: -9223372036854775808
       MaxInt:  9223372036854775807MaxUint: 18446744073709551615MinInt: -9223372036854775808MaxInt: 9223372036854775807系统架构: gc amd64 darwin
    Int 大小: 64

    原文地址:https://stackoverflow.com/questions/6878...

    译文地址:https://learnku.com/go/t/62359

    以上就是一文解析Go中Int的最大数值的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:learnku,如有侵犯,请联系admin@php.cn删除
    专题推荐: go golang go教程
    上一篇:embed是啥?Go怎么用它加载静态文件? 下一篇:分析Kubernetes gRPC负载均衡(L4 vs L7 )
    Web大前端开发直播班

    相关文章推荐

    • GoLand是啥?怎么使用注释 Goanno?• Golang和Lua相遇会擦出什么火花?• 享受PHP与Go的强大合体【RoadRunner】的乐趣!• embed是啥?Go怎么用它加载静态文件?

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网