做数学运算时,如何得到溢出的部分?
例如,假设 32 位整数:
unsigned int a = 0Xffffffff;
unsigned int b = 0xffffffff;
unsigned int c = a + b;
在这种情况下,c
是 0xfffffffe
,但答案应该是 0x1fffffffe
。如何获得溢出的 1?
我怎样才能对乘法做同样的事情?我可以将两个大数相乘,只得到溢出的部分吗?
bigint 库如何管理它?
最佳答案
@Warning 不可携带@
示例:https://godbolt.org/z/NcyNzR
#include <stdio.h>
int main(void)
{
unsigned int res;
if(__builtin_uadd_overflow(0Xffffffff, 0Xffffffff, &res))
{
printf("Overflowed\n");
}
printf("Result: 0x%x\n", res);
}
- 使用内联汇编读取进位标志
关于c - 从算术运算中获取溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60358013/