【发布时间】:2016-12-06 22:18:39
【问题描述】:
我在大学有一个任务,我需要为给定的主程序编写函数。 一切都在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。
任何人有任何想法,如何解决这个问题?
【问题讨论】:
-
尝试
res=((uint64_t)x+y)%n;代替。 -
是的....不允许使用64位...这就是问题所在。
标签: c overflow modulo unsigned-integer