Golang が定数を計算するときにオーバーフロー エラーをスローするのはなぜですか?

DDD
リリース: 2024-10-29 19:05:02
オリジナル
760 人が閲覧しました

Why Does Golang Throw an Overflow Error When Calculating Constants?

uint64 を使用した Golang の定数オーバーフローを理解する

問題:

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

<code class="go">userid := 12345
did := (userid & ^(0xFFFF << 48))</code>
ログイン後にコピー

このコードをコンパイルしようとすると、エラーが発生します:

./xxxx.go:511: constant -18446462598732840961 overflows int
ログイン後にコピー

分析:

この問題の核心は次のとおりです。型なし定数 ^(0xFFFF

解決策:

この問題を解決するには、型なし定数をその大きな大きさに対応できる型に明示的にキャストできます。たとえば、問題のある式を次のように置き換えることができます。

<code class="go">did := (userid & (1<<48 - 1))</code>
ログイン後にコピー

この変更された式では、1

<code class="go">func main() {
  const userID int64 = 12345
  did := userID & (1<<48 - 1)
  println(did)
}</code>
ログイン後にコピー

これらの提案に従うことで、Golang で定数のオーバーフローを効果的に処理し、コードを保守できます。異なるアーキテクチャ間での移植性。

以上がGolang が定数を計算するときにオーバーフロー エラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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