gpt4 book ai didi

c++ - 大型原始数字类型之间的算术 : can I save the overflow?

转载 作者:太空宇宙 更新时间:2023-11-04 05:27:15 25 4
gpt4 key购买 nike

免责声明:我知道,无符号整数是基本数字类型,但它们在技术上不会溢出,我在这里对所有基本数字类型使用术语“溢出”。

在 C 或 C++ 中,根据标准或特定实现,有原始数字类型给定算术运算,即使该运算可能溢出,我可以保存结果 + 加上溢出的部分 ?

即使这听起来很奇怪,我的想法是现代 CPU 上的寄存器通常比 32 位 float 或 64 位 uint64_t 大得多,所以有实际控制溢出并将其存储在某处的潜力。

最佳答案

不,寄存器“通常不会比 64 位 uint64_t 大很多”。

有一个溢出标志,对于有限数量的操作(加法和减法),将这个额外的位与结果配对就足以捕获整个结果范围。

但一般来说,您需要转换为更大的类型(可能在软件中实现)以处理溢出输入类型的结果。

任何执行此类操作的操作(例如某些 32 位处理器具有 32x32 => 32 高,32 低宽乘法指令)将由您的编译器作为内部函数或通过内联汇编提供。

看,我找到了它的 64 位版本,名为 Multiply128the matching __mul128 instrinsic available in Visual C++

关于c++ - 大型原始数字类型之间的算术 : can I save the overflow?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20530140/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com