首頁 > 後端開發 > Golang > 一文解析Go中Int的最大數值

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

藏色散人
發布: 2021-11-15 15:35:21
轉載
4815 人瀏覽過

本文由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 位元

##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

完整範例(應與下圖相同):

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.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板