Go で Int64 を Int に安全に変換するにはどうすればよいですか?

Barbara Streisand
リリース: 2024-11-15 07:07:02
オリジナル
543 人が閲覧しました

How to Safely Convert Int64 to Int in Go?

Go で Int64 を Int に変換する: ガイド

型変換はプログラミングにおける一般的なタスクであり、Go では変換が簡単です。 2 つの整数型の間。 int と int64 の違いを理解することは、正確かつ効率的な変換にとって重要です。

課題

int64 (64 ビット整数) と int (32- ビット整数) を使用する場合ビット整数) Go では、開発者はこれら 2 つの型の値を比較する必要が生じる場合があります。ただし、直接比較すると、オーバーフローやアンダーフローにより予期しない結果が生じる可能性があるため、int64 から int への変換は難しい場合があります。

たとえば、よくある間違いは、次の図に示すように、int64 値を int に直接変換することです。提供されたコード スニペット:

for a := 2; a < maxInt; a++ {
    if isPrime(a) {
        if base.N % a == 0 {
            base.Result = a
        }
    }
}
ログイン後にコピー

ここで、maxInt は int64 値であり、ループ条件 (< maxInt) はint32 (a) と int64 を比較します。これにより、不正確な結果が生じる可能性があります。

解決策

Go で int64 値を int と正確に比較するには、int 型を int64 に変換するのが正しい方法です。これにより、両方の値が同じ型であることが保証され、オーバーフローまたはアンダーフローのリスクが排除されます。

for a := 2; a < int64(maxInt); a++ {
    if isPrime(a) {
        if base.N % a == 0 {
            base.Result = a
        }
    }
}
ログイン後にコピー

a を int64 にキャストすることで、ループ条件は int64 値を別の int64 値と正しく比較し、適切な比較を保証します。 .

補足

この型変換を行う際には、オーバーフローまたはアンダーフローの可能性を考慮することが重要です。変換された値がターゲットの型に対して大きすぎる場合、オーバーフローが発生し、不正な値が得られる可能性があります。逆に、変換された値が小さすぎる場合、アンダーフローが発生し、値が下限に切り捨てられる可能性があります。

以上がGo で Int64 を Int に安全に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート