带溢出的有符号整数乘法

时间:2019-12-02 14:09:28

标签: c integer long-integer integer-overflow

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

1 个答案:

答案 0 :(得分:1)

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

因此,您可以计算1ULL * a * b并将其分配给uint64_t:系数在那里可以强制ab进行类型转换。请注意,如果编译器支持int64_t,那么它也必须支持uint64_t

然后是比较此产品尺寸的问题cf。 ab来查看它是否适合int64_t。如果产品比ab小(在无符号意义上),则会发生包装。