ホームページ  >  記事  >  バックエンド開発  >  Goで整数オーバーフローを検出するには?

Goで整数オーバーフローを検出するには?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-06 18:35:03515ブラウズ

How to Detect Integer Overflow in Go?

Go での整数オーバーフローの検出

整数オーバーフローは、算術演算の結果がデータ型で表現できる最大値または最小値を超えると発生します。 。 Go では、整数は符号付き整数または符号なし整数を使用して表され、32 ビットと 64 ビットが最も一般的です。

整数のオーバーフローを検出する「正しい」方法は、結果を最大値または符号なし整数と比較することです。データ型の最小値。たとえば、32 ビット加算の場合、2 つの正の整数の合計が最大値 (2^31 - 1) を超える場合、または 2 つの負の整数の合計が最小値 (-2^31) より小さい場合、オーバーフローが発生します。

次のコードを考えてみましょう:

a, b := 2147483647, 2147483647 // 32-bit integers
c := a + b

c がオーバーフローしたかどうかを確認するには、それを最大 32 ビット整数と比較できます:

if c > math.MaxInt32 {
    // Integer overflow occurred
}

同様に、 64 ビット加算では、2 つの正の整数の合計が最大値 (2^63 - 1) を超える場合、または 2 つの負の整数の合計が最小値 (-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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。