我想解决以下问题:假设我们有两个int64_t
和数字a
和b
。我们想找到a * b
是否乘积符合int64_t
数据类型,并且以其他方式得出最低64位乘法结果。我该如何解决?我知道使用长乘法解决uint64_t
数据类型类似问题的解决方案,我们可以在这里应用它吗?
答案 0 :(得分:1)
通过纯粹的计算魔鬼行为,int64_t
和uint64_t
乘法具有相同的位模式。
因此,您可以计算1ULL * a * b
并将其分配给uint64_t
:系数在那里可以强制a
和b
进行类型转换。请注意,如果编译器支持int64_t
,那么它也必须支持uint64_t
。
然后是比较此产品尺寸的问题cf。 a
和b
来查看它是否适合int64_t
。如果产品比a
和b
小(在无符号意义上),则会发生包装。