带溢出的有符号整数乘法

问题描述 投票:1回答:1

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

c integer long-integer integer-overflow
1个回答
1
投票

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

因此您可以计算1ULL * a * b并将其分配给uint64_t:系数在那里强制ab的类型转换。请注意,如果编译器支持int64_t,则还需要支持uint64_t

然后是比较此产品尺寸的问题。 ab,看是否适合int64_t。如果乘积小于ab中的任意一个,则将发生环绕。

© www.soinside.com 2019 - 2024. All rights reserved.