Mengesan Limpahan Integer dalam Go
Limpahan integer berlaku apabila hasil operasi aritmetik melebihi nilai maksimum atau minimum yang boleh diwakili oleh jenis data . Dalam Go, integer diwakili menggunakan integer yang ditandatangani atau tidak ditandatangani, dengan 32-bit dan 64-bit adalah yang paling biasa.
Untuk mengesan limpahan integer, cara "betul" ialah membandingkan hasil dengan maksimum atau nilai minimum untuk jenis data. Sebagai contoh, untuk penambahan 32-bit, limpahan berlaku jika jumlah dua integer positif melebihi nilai maksimum (2^31 - 1) atau jika jumlah dua integer negatif adalah kurang daripada nilai minimum (-2^31).
Pertimbangkan kod berikut:
a, b := 2147483647, 2147483647 // 32-bit integers c := a + b
Untuk menyemak sama ada c melimpah, kita boleh membandingkannya dengan integer 32-bit maksimum:
if c > math.MaxInt32 { // Integer overflow occurred }
Begitu juga, untuk Tambahan 64-bit, limpahan berlaku jika jumlah dua integer positif melebihi nilai maksimum (2^63 - 1) atau jika jumlah dua integer negatif kurang daripada nilai minimum (-2^63). Semakan itu ialah:
if c > math.MaxInt64 { // Integer overflow occurred }
Pendekatan alternatif ialah menggunakan pengendalian ralat tersuai. Kita boleh mentakrifkan pembolehubah ralat dan menetapkannya kepada sifar jika tiada limpahan:
var errOverflow error if right > 0 { if left > math.MaxInt32-right { errOverflow = errors.New("integer overflow") } } else { if left < math.MinInt32-right { errOverflow = errors.New("integer overflow") } }
Kemudian, kita boleh menyemak pembolehubah ralat selepas operasi:
if errOverflow != nil { // Integer overflow occurred }
Atas ialah kandungan terperinci Bagaimana untuk Mengesan Limpahan Integer dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!