我想解决以下问题:假设我们有两个int64_t
数字a
和b
。我们想找到a * b
是否乘积适合int64_t
数据类型,并且以其他方式得出最低64位乘法结果。我该如何解决?我知道使用长乘法的uint64_t
数据类型的类似问题的解决方案,我们可以在这里应用吗?
通过纯粹的计算行为,int64_t
和uint64_t
乘法具有相同的位模式。
因此您可以计算1ULL * a * b
并将其分配给uint64_t
:系数在那里强制a
和b
的类型转换。请注意,如果编译器支持int64_t
,则还需要支持uint64_t
。
然后是比较此产品尺寸的问题。 a
和b
,看是否适合int64_t
。如果乘积小于a
和b
中的任意一个,则将发生环绕。