c - 带溢出的有符号整数乘法
问题描述
我想解决以下问题:假设我们有两个int64_t
数字a
和b
. 并且我们想以其他方式查找a * b
乘积是否适合int64_t
数据类型和最低 64 位乘法结果。我该如何解决这个问题?uint64_t
我知道使用长乘法的数据类型的类似问题的解决方案,我们可以在这里应用它吗?
解决方案
通过纯粹的计算恶魔行为,int64_t
乘法uint64_t
具有相同的位模式。
因此,您可以计算1ULL * a * b
并将其分配给 a uint64_t
:该系数用于强制类型转换a
and b
。请注意,如果编译器支持,int64_t
那么它也需要支持uint64_t
。
然后就是比较这个产品的大小了。a
并b
查看它是否适合int64_t
. 如果乘积(在无符号意义上)小于a
和中的任何一个,则将发生回绕b
。
推荐阅读
- android - Android Studio 中的 Chromium 构建 - /_all/build/intermediates/compile_and_runtime_not_namespaced_r_class_jar/debug/R.jar(没有这样的文件或目录)
- visual-studio-code - vs代码为类属性设置自定义颜色
- google-cloud-platform - GCP 身份识别代理 - 返回 403
- javascript - 在新窗口中打开验证码 puppeteer
- reactjs - 反应 scrollIntoView() 不适用于 ref
- javascript - 如何修复未捕获的 TypeError:无法在 wordpress 中的 javascript 中设置 null 的属性“innerHTML”?
- core-data - CoreData 同一个对象有不同的 URIRepresentations
- flutter - 如何从数据库颤动中选择更大或最大的 id
- c++ - 从 ns3 中的流监视器生成的 xml 文件中提取有关 rts、cts 和 ack 的信息
- python-3.x - Python使用lambda函数创建if-else条件和for循环的一行语句