首页 > 解决方案 > 带溢出的有符号整数乘法

问题描述

我想解决以下问题:假设我们有两个int64_t数字ab. 并且我们想以其他方式查找a * b乘积是否适合int64_t数据类型和最低 64 位乘法结果。我该如何解决这个问题?uint64_t我知道使用长乘法的数据类型的类似问题的解决方案,我们可以在这里应用它吗?

标签: cintegerlong-integerinteger-overflow

解决方案


通过纯粹的计算恶魔行为,int64_t乘法uint64_t具有相同的位模式。

因此,您可以计算1ULL * a * b并将其分配给 a uint64_t:该系数用于强制类型转换aand b。请注意,如果编译器支持,int64_t那么它也需要支持uint64_t

然后就是比较这个产品的大小了。ab查看它是否适合int64_t. 如果乘积(在无符号意义上)小于a和中的任何一个,则将发生回绕b


推荐阅读