Go 中的級聯常數溢位
在Go 中使用常數時,了解它們的類型轉換以避免潛在的溢出非常重要。考慮以下程式碼片段:
<code class="go">const ( userid = 12345 did = (userid &^ (0xFFFF << 48)) )</code>
編譯此程式碼會導致以下錯誤:
constant -18446462598732840961 overflows int
要解決此問題,我們需要深入研究Go 執行的底層類型轉換
理解非類型化常數和型別轉換
在上面的程式碼中,常數0xFFFF
在我們的例子中,我們在類型化常數userid (它是一個int)之間執行AND 運算(&) ) 和無型別常數0xFFFF
溢位整數常數
當我們對無型態常數取反 0xFFFF
使用Int64 實現可移植性
為了避免這個問題,我們可以使用更大的整數類型,例如int64,它具有更大的範圍,可以容納更大的常量值。
<code class="go">const ( userid int64 = 12345 did = (userid &^ (0xFFFF << 48)) )</code>
此變更允許我們可以在可用整數類型的限制內表示和操作常數,而不會遇到溢位。
以上是為什麼我的 Go 程式碼在使用常數時會出現溢位錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!