Wil*_*mer 13

快速总结:

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

背景:

uintuint32uint64

请注意,它往往“更快”,因为使用非本地类型有时需要处理器执行额外的数学运算和边界检查,以便模拟更大或更小的整数。考虑到这一点,请注意处理器(或编译器的优化代码)的性能几乎总是比添加您自己的边界检查代码要好,所以如果它有任何发挥作用的风险,它可能会使简单地使用固定大小的版本是有意义的,并让优化的仿真处理由此产生的任何后果。

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

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

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

uintint
uintintuint
int21(1 << bits.UintSize) / 2 - 1
int1-2(1 << bits.UintSize) / -2

总之:

(1 << bits.UintSize) - 1
(1 << bits.UintSize) / 2 - 1
(1 << bits.UintSize) / -2

完整示例(应与下面相同)

package main

import "fmt"
import "math"
import "math/bits"

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)
}