偵測Go 中的整數溢位
當算術運算的結果超過資料型態可表示的最大值或最小值時,就會發生整數溢位。在 Go 中,整數使用有符號或無符號整數表示,其中最常見的是 32 位元和 64 位元。
要偵測整數溢出,「正確」的方法是將結果與最大值或最小值進行比較資料類型的最小值。例如,對於 32 位元加法,如果兩個正整數總和超過最大值(2^31 - 1)或兩個負整數總和小於最小值(-2^31),就會發生溢位。
考慮以下程式碼:
a, b := 2147483647, 2147483647 // 32-bit integers c := a + b
要檢查c 是否溢出,我們可以將其與最大32 位元整數進行比較:
if c > math.MaxInt32 { // Integer overflow occurred }
類似地,對於64 位元加法,如果兩個正整數總和超過最大值(2^63 - 1)或兩個負整數總和小於最小值(-2^63),就會發生溢位。檢查將是:
if c > math.MaxInt64 { // Integer overflow occurred }
另一種方法是使用自訂錯誤處理。我們可以定義一個錯誤變量,如果沒有溢位則將其設為nil:
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") } }
然後,我們可以在操作後檢查錯誤變數:
if errOverflow != nil { // Integer overflow occurred }
以上是如何偵測 Go 中的整數溢位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!