Home >Backend Development >Golang >An article analyzing the maximum value of Int in Go
This article is introduced by the tutorial column of go language to introduce the maximum value of Int in Go. I hope it will be helpful to friends in need!
Summary:
import "math/bits"const ( MaxUint uint = (1 << bits.UintSize) - 1 MaxInt int = (1 << bits.UintSize) / 2 - 1 MinInt int = (1 << bits.UintSize) / -2)
Background:
I think you know, uint
type size Same as uint32
or uint64
, depending on your platform. Typically the sizeless version is only used if there is no risk of getting close to the maximum, as the sizeless version can use "native" types, which depends on the platform, and it tends to be faster.
Note that "faster" is because using non-native types requires the processor to perform additional math and bounds checks in order to simulate larger or smaller integers. Therefore, the processor (or compiler's optimized code) will perform better than the code that adds bounds checks.
That being said, there are still situations where it's useful to know what you're working with.
The "math/bits" package contains the uint
size in bytes (Translator's Note: UintSize). To determine the maximum value, shift 1
to the left by a number of places and subtract 1. That is: (1 << bits.UintSize) - 1
Note that when calculating the maximum value of uint
, you usually need to make it explicit into a uint
(or larger type) type variable, otherwise the compiler may fail because it will default to trying to assign that calculation to a signed int
(very Obviously, it doesn't fit), so:
const MaxUint uint = (1 << bits.UintSize) - 1
This is a direct answer to your question, but you might be interested in some related calculations.
According to the spec, uint
and int
are always the same size.
so we can also use this constant to determine the maximum value of##uint
32-bit or 64-bit
int
and uint
are the same size
int by taking the same answer and dividing by
2, then subtract
1. That is:
(1 << bits.UintSize) / 2 - 1
int, by shifting
1 that many digits and divide the result by
-2. That is:
(1 << bits.UintSize) / -2
(1 << bits.UintSize) - 1
(1 << bits.UintSize) / 2 - 1
(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)}Output:
MinInt32: -2147483648 MaxInt32: 2147483647MaxUint32: 4294967295 MinInt64: -9223372036854775808 MaxInt64: 9223372036854775807MaxUint64: 18446744073709551615 MaxUint: 18446744073709551615 MinInt: -9223372036854775808 MaxInt: 9223372036854775807MaxUint: 18446744073709551615MinInt: -9223372036854775808MaxInt: 9223372036854775807系统架构: gc amd64 darwin Int 大小: 64
Original address: https://stackoverflow.com/questions/6878...Translation address: https://learnku.com/go/t/62359
The above is the detailed content of An article analyzing the maximum value of Int in Go. For more information, please follow other related articles on the PHP Chinese website!