gpt4 book ai didi

go - golang常量溢出uint64有什么问题

转载 作者:IT王子 更新时间:2023-10-29 01:16:42 24 4
gpt4 key购买 nike

userid := 12345
did := (userid & ^(0xFFFF << 48))

编译这段代码时,我得到:

./xxxx.go:511: constant -18446462598732840961 overflows int

您知道这是怎么回事以及如何解决吗?谢谢。

最佳答案

^(0xFFFF << 48)是一个无类型常量,在 go 中是一个任意大的值。

0xffff << 480xffff000000000000 .当你否定它时,你会得到 -0xffff000000000001 (因为有二进制补码,-x = ^x + 1,或 ^x = -(x + 1))。

当你写 userid := 12345 , userid获取类型 int .然后,当您尝试使用无类型常量 & 和( -0xffff000000000001 )它时编译器认为这个常量需要是一个 int .此时,编译器会报错,因为该值的数量级太大,不可能是 int。 .

如果你想得到常量 0x0000ffffffffffff , 那么你可以使用 1<<48 - 1 ,这(如果你有 64 位整数)将适合。因为如果int,您的代码将永远无法工作。是 32 位,那么你可能应该使用 int64在你的代码中而不是 int使其便携。

博文https://blog.golang.org/constants解释常量如何工作,以及它们为何如此的一些背景知识。

关于go - golang常量溢出uint64有什么问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29787422/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com