首頁 > 後端開發 > Golang > 如何偵測 Go 中的整數溢位?

如何偵測 Go 中的整數溢位?

Susan Sarandon
發布: 2024-11-06 18:35:03
原創
589 人瀏覽過

How to Detect Integer Overflow in Go?

偵測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中文網其他相關文章!

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