登录
首页 >  Golang >  Go问答

int8 乘以正数并转换为 uint32 后溢出

来源:stackoverflow

时间:2024-03-05 10:00:26 106浏览 收藏

欢迎各位小伙伴来到golang学习网,相聚于此都是缘哈哈哈!今天我给大家带来《int8 乘以正数并转换为 uint32 后溢出》,这篇文章主要讲到等等知识,如果你对Golang相关的知识非常感兴趣或者正在自学,都可以关注我,我会持续更新相关文章!当然,有什么建议也欢迎在评论留言提出!一起学习!

问题内容

我正在尝试乘以 8 位正整数并将结果转换为 uint32

a := int8(12)
b := uint32(a * a) // 4294967184

在上面的代码中,乘法会导致溢出。 但是,如果我在相乘之前将每个 int8 转换为 uint32/uint8,我会得到如下所示的预期结果,

b := uint32(uint32(a) * uint32(a)) // 12

为什么在相乘之前需要进行强制转换?

代码是这样执行的吗?

tmp := a*a
b := int32(tmp)

或者还有别的吗?


正确答案


您的问题似乎已经有了答案,但为了清楚起见:

将类型转换的语法视为与函数调用的语法相同。参数内的表达式被完全求值,然后传递给函数。

如果你这样做

math.sin(f*f)

你不会期望它等同于

math.Sin(f) * math.Sin(f)

您需要在乘法之前进行强制转换,因为 12 * 12 对于带符号的 8 位值来说不是安全的运算。

今天关于《int8 乘以正数并转换为 uint32 后溢出》的内容介绍就到此结束,如果有什么疑问或者建议,可以在golang学习网公众号下多多回复交流;文中若有不正之处,也希望回复留言以告知!

声明:本文转载于:stackoverflow 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>