在Go语言中,int类型的最大值是多少?

234

如何指定无符号整型的最大值?

我想知道如何在下面的循环中初始化min,该循环从一些结构体中迭代地计算最小值和最大长度。

var minLen uint = ???
var maxLen uint = 0
for _, thing := range sliceOfThings {
  if minLen > thing.n { minLen = thing.n }
  if maxLen < thing.n { maxLen = thing.n }
}
if minLen > maxLen {
  // If there are no values, clamp min at 0 so that min <= max.
  minLen = 0
}

这样第一次比较时,minLen >= n


5
请看这段代码片段 int(^uint(0) >> 1) // largest int,它来自于 https://golang.org/doc/effective_go.html#printing。 - Victor
13个回答

0

我一直记住的方法是,将位数(int8为8位,int为32位)除以8,就得到了字节数(int8为1个字节,int为4个字节)。

每个字节都是0xFF(对于带符号整数来说,最高有效字节将是0x7F)。以下是结果:

package main

func main() {
   {
      var n int8 = 0x7F
      println(n) // 127
   }
   {
      var n uint8 = 0xFF
      println(n) // 255
   }
   {
      var n int = 0x7FFF_FFFF
      println(n) // 2147483647
   }
   {
      var n uint = 0xFFFF_FFFF
      println(n) // 4294967295
   }
}

在64位平台上,intint64 - Vitaly Zdanevich

0
MaxInt8   = 1<<7 - 1
MinInt8   = -1 << 7
MaxInt16  = 1<<15 - 1
MinInt16  = -1 << 15
MaxInt32  = 1<<31 - 1
MinInt32  = -1 << 31
MaxInt64  = 1<<63 - 1
MinInt64  = -1 << 63
MaxUint8  = 1<<8 - 1
MaxUint16 = 1<<16 - 1
MaxUint32 = 1<<32 - 1
MaxUint64 = 1<<64 - 1

-1

一个轻量级的包含它们(以及其他整数类型的限制和一些广泛使用的整数函数):

import (
    "fmt"
    "<Full URL>/go-imath/ix"
    "<Full URL>/go-imath/ux"
)
...
fmt.Println(ix.Minimal) // Output: -2147483648 (32-bit) or -9223372036854775808 (64-bit)
fmt.Println(ix.Maximal) // Output: 2147483647 or 9223372036854775807
fmt.Println(ux.Minimal) // Output: 0
fmt.Println(ux.Maximal) // Output: 4294967295 or 18446744073709551615

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接