【发布时间】:2020-10-30 20:40:16
【问题描述】:
计算机使用二进制补码来存储整数。比如说,对于 int32 签名,0xFFFFFFFF 代表“-1”。根据这个理论,用C语言编写这样的代码来初始化一个有符号整数为-1并不难;
int a = 0xffffffff;
printf("%d\n", a);
显然,结果是-1。
但是,在 Go 中,相同的逻辑转储不同。
a := int(0xffffffff)
fmt.Printf("%d\n", c)
代码 sn -p 打印 4294967295,uint32 类型可以容纳的最大数量。即使我在fmt.Printf("%d\n", int(c)) 中显式转换c,结果仍然是一样的。
当对有符号整数进行一些位操作时也会发生同样的问题,使有符号变为无符号。
那么,Go 在这种情况下会发生什么?
【问题讨论】: