C 编程 - 使用溢出的无符号整数之和的模

标签 c overflow modulo unsigned-integer

我在大学有一项作业,需要为给定的主程序编写函数。 一切都在 c 中。

所以,我的问题是我需要使用两个无符号整数之和的模块。

uint32_t mod_add(uint32_t x, uint32_t y, uint32_t n)
{
    uint32_t res;

    res = (x + y) % n;

当 x 和 y 之和低于 2^32-1 时,此方法可以正常工作。 我的麻烦是,当总和高于这个值时,它显然会溢出并且模值是错误的。

在我的作业中 x = 2^32-3; y =1174501 且 n =2^32-1(n 为模); 我的结果是1174497,应该是1174499。

有人知道如何解决这个问题吗?

最佳答案

给你。

uint32_t remainder(uint32_t x, uint32_t y, uint32_t d)
{
    uint32_t r1 = x % d;
    uint32_t r2 = y % d;

    return r1 < (d - r2) ? r1 + r2 : r1 - (d - r2);
}

当然,您可以使用任何整数类型来代替 uint32_t,例如 unsigned long long

关于C 编程 - 使用溢出的无符号整数之和的模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41005998/

相关文章:

改变线程执行的函数

c - 在 C 代码中解压 .xz 文件

Java 模运算符

algorithm - 如何使用 mod 运算符包装数字

c - C 编程中覆盖寄存器 int 失败

一个线程可以打开一个套接字,而另一个线程可以关闭它吗?

css - 如何垂直创建可滚动的 Div 标签?

c++ - projAPI(GIS 库)堆溢出

c# - 奇怪的c#溢出错误

c++ - 使用字符串大小的模数怪异行为