Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Artikel yang menganalisis nilai maksimum Int in Go

Artikel yang menganalisis nilai maksimum Int in Go

藏色散人
藏色散人ke hadapan
2021-11-15 15:35:214774semak imbas

Artikel ini diperkenalkan oleh ruangan tutorial go language untuk memperkenalkan nilai maksimum Int dalam Go. Saya harap ia dapat membantu rakan yang memerlukan.

Ringkasan:

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

Latar Belakang:

Saya rasa anda tahu, saiz jenis uint berbeza daripada uint32 atau uint64 adalah sama, bergantung pada platform anda. Biasanya versi tanpa saiz hanya digunakan jika tiada risiko untuk mendekati maksimum, kerana versi tanpa saiz boleh menggunakan jenis "asli", yang bergantung pada platform, dan ia cenderung lebih pantas.

Perhatikan bahawa "lebih pantas" adalah kerana menggunakan jenis bukan asli memerlukan pemproses melakukan semakan matematik dan sempadan tambahan untuk mensimulasikan integer yang lebih besar atau lebih kecil. Oleh itu, pemproses (atau kod pengoptimuman pengkompil) akan berprestasi lebih baik daripada kod yang menambah semakan sempadan.

Maksudnya, masih terdapat situasi yang berguna untuk mengetahui perkara yang sedang anda kerjakan.

Pakej "matematik/bit" mengandungi saiz uint dalam bait (Nota Penterjemah: UintSize). Untuk menentukan nilai maksimum, alihkan 1 ke kiri dengan beberapa tempat dan tolak 1. iaitu: (1 << bits.UintSize) - 1

Ambil perhatian bahawa apabila mengira nilai maksimum uint anda biasanya perlu meletakkannya secara eksplisit ke dalam pembolehubah jenis uint (atau jenis yang lebih besar), jika tidak ia menyusun Pengkompil mungkin gagal kerana secara lalai ia akan cuba memberikan pengiraan itu kepada int yang ditandatangani (yang jelas ia tidak sesuai), jadi:

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

Ini adalah jawapan langsung kepada soalan anda, tetapi Anda mungkin berminat dalam beberapa pengiraan yang berkaitan.

Mengikut spesifikasi, uint dan int sentiasa saiz yang sama.

uint 32-bit atau 64-bit

int Saiz yang sama seperti uint

Oleh itu, kita juga boleh menggunakan pemalar ini untuk menentukan nilai maksimum int dengan mengambil jawapan yang sama dan membahagi dengan 2 dan kemudian menolak 1. Iaitu: nilai minimum (1 << bits.UintSize) / 2 - 1

dan int dengan mengalihkan 1 bit sebanyak itu dan membahagikan hasilnya dengan -2. Iaitu: (1 << bits.UintSize) / -2

Ringkasnya:

** MaxUint: ** (1 << bits.UintSize) - 1

** MaxInt: ** (1 << bits.UintSize) / 2 - 1

* * MinInt: ** (1 << bits.UintSize) / -2

Contoh penuh (harus sama seperti imej di bawah):

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

Alamat asal: https://stackoverflow.com/questions/6878...

Alamat terjemahan: https://learnku.com/go/t/62359

Atas ialah kandungan terperinci Artikel yang menganalisis nilai maksimum Int in Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:learnku.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam