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