使用 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中文网其他相关文章!