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

Susan Sarandon
リリース: 2024-11-06 18:35:03
オリジナル
513 人が閲覧しました

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!