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 sepertiuint
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!