Cet article est introduit par la colonne tutoriel go language pour présenter la valeur maximale de Int dans Go. J'espère qu'il sera utile aux amis dans le besoin !
Résumé :
import "math/bits"const ( MaxUint uint = (1 << bits.UintSize) - 1 MaxInt int = (1 << bits.UintSize) / 2 - 1 MinInt int = (1 << bits.UintSize) / -2)
Contexte :
Je pense que vous savez que le type uint
a la même taille que uint32
ou uint64 code> , selon votre plateforme. Généralement, la version sans taille n'est utilisée que s'il n'y a aucun risque de se rapprocher du maximum, car la version sans taille peut utiliser des types "natifs", qui dépendent de la plate-forme, et elle a tendance à être plus rapide. <code>uint
类型的大小与uint32
或uint64
相同,具体取决于您所在的平台。通常,只有在没有接近最大值风险的情况下,才会使用无尺寸的版本,因为没有尺寸规格的版本可以使用“本机”类型,这取决于平台,并且它往往更快。
请注意,更 “快” 是因为使用非本机类型需要处理器执行额外的数学计算和边界检查,以便模拟更大或更小的整数。因此,处理器(或编译器的优化代码)性能会比添加边界检查的代码要好。
话虽如此,在某些情况下,了解您正在使用的内容仍然很有用。
“math/bits“ 包中含有以字节为单位的uint
大小(译者注:UintSize )。要确定最大值,将 1
左移许多位,再减去 1。即:(1 << bits.UintSize) - 1
请注意,在计算 uint
的最大值时,您通常需要将其显式放入一个 uint
(或更大的类型)类型变量中,否则编译器可能会失败,因为它会默认尝试将该计算分配给一个有符号int
(很明显,它不适合),所以:
const MaxUint uint = (1 << bits.UintSize) - 1
这是您问题的直接答案,但您可能对一些相关的计算感兴趣。
根据 spec,uint
和 int
的大小始终相同。
uint
32 位或 64 位
int
与uint
大小相同
因此,我们也可以使用这个常量来确定 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
uint
en octets (Note du traducteur : UintSize). Pour déterminer la valeur maximale, décalez 1
vers la gauche d'un certain nombre de positions et soustrayez 1. C'est-à-dire : (1 << bits.UintSize) - 1
Veuillez noter que lors du calcul de la valeur maximale d'unuint
, vous devez généralement l'indiquer explicitement dans une variable de typeuint
(ou plus grand), sinon le compilateur risque d'échouer car il tentera par défaut d'attribuer le calcul à unint
signé (très évidemment, ce n'est pas le cas ça ne rentre pas), donc :Ceci est une réponse directe à votre question, mais vous pourriez être intéressé par certains calculs connexes. Selon les spécifications,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)}Copier après la connexionuint
etint
ont toujours la même taille.
🎜🎜uint
🎜 32 bits ou 64 bits 🎜🎜🎜int
🎜 Même taille queuint
🎜🎜🎜Donc, nous pouvons également utiliser cette constante pour déterminer la valeur maximale d'unint
en prenant la même réponse et en divisant par2
, puis en soustrayant1
. Soit :(1 << bits.UintSize) / 2 - 1
🎜🎜 et la valeur minimale deint
, en décalant1
autant de chiffres et divisez le résultat par-2
. Soit :(1 << bits.UintSize) / -2
🎜🎜En bref : 🎜🎜** MaxUint : **(1 << bits.UintSize) - 1🎜🎜** MaxInt : **
(1 << bits.UintSize) / 2 - 1
🎜🎜** MinInt : **(1 << ; bits .UintSize) / -2
🎜🎜Exemple complet (doit être le même que l'image ci-dessous) : 🎜🎜Sortie : 🎜rrreee🎜🎜🎜Adresse originale : https://stackoverflow.com/questions/ 6878...🎜 🎜Adresse de traduction : https://learnku.com/go/t/62359🎜🎜MinInt32: -2147483648 MaxInt32: 2147483647MaxUint32: 4294967295 MinInt64: -9223372036854775808 MaxInt64: 9223372036854775807MaxUint64: 18446744073709551615 MaxUint: 18446744073709551615 MinInt: -9223372036854775808 MaxInt: 9223372036854775807MaxUint: 18446744073709551615MinInt: -9223372036854775808MaxInt: 9223372036854775807系统架构: gc amd64 darwin Int 大小: 64Copier après la connexion
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!