使用uint64 理解Golang 的持續溢位
問題:
問題:<code class="go">userid := 12345 did := (userid & ^(0xFFFF << 48))</code>考慮以下Go>問題:
./xxxx.go:511: constant -18446462598732840961 overflows int
請考慮以下Go>代碼
嘗試編譯這段程式碼時,遇到錯誤:分析:
這個問題的癥結在於無問題類型常數^(0xFFFF
<code class="go">did := (userid & (1<<48 - 1))</code>
解:
<code class="go">func main() { const userID int64 = 12345 did := userID & (1<<48 - 1) println(did) }</code>
要解決此問題,可以將無型常數明確轉換為可容納其較大量層級的型別。例如,有問題的表達式可以替換為以下內容:
在此修改後的表達式中,1透過遵循這些建議,您可以有效處理Golang 中的常數溢位並維護程式碼跨不同架構的可移植性。以上是為什麼Golang在計算常數時會拋出溢位錯誤?的詳細內容。更多資訊請關注PHP中文網其他相關文章!