为了账号安全,请及时绑定邮箱和手机立即绑定

如何计算golang溢出?

如何计算golang溢出?

Go
暮色呼如 2023-06-01 14:59:59
我是 Golang 的新手package mainimport "fmt"func main() {    var u uint8 = 255    var m uint16 = 255    fmt.Println(u, u-1, u*(u-1))    fmt.Println(m, m+1, m*m)}输出./g2255 254 2255 256 65025我知道我在第一种情况下溢出了。但是为什么我得到的结果是2呢?
查看完整描述

1 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

你已经暗示过溢出,事实上这正是这里发生的事情。您已经知道 和u是什么u-1(分别是 255 和 254),所以让我们将它们相乘。这给了我们 64770,或二进制:


64770       = 1111 1101 0000 0010

这个结果是 16 位宽,但我们将它存储在uint8只有 8 位宽的 a 中。因此它被截断为 8 个最低有效位。从数学上讲,这相当于执行64770 mod 2^8或64770 mod 256。在编程上,它等同于执行64770 & (1 << 7)or 64770 & 256:


64770       = 1111 1101 0000 0010

256         =           1111 1111

64770 & 256 = 0000 0000 0000 0010 = 2

无论您选择如何想象这个操作,结果都是 2。


查看完整回答
反对 回复 2023-06-01
  • 1 回答
  • 0 关注
  • 103 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信