c - 数字大于 2³² 的按位取模

标签 c bit-manipulation division modulo

我必须计算 C 中两个大数的余数。一个大小为 938 或 256 位,另一个大小为 85 位。两者都不是 2^n 值!

我的基本想法是把每一位都作为一个短数组的一个元素,然后用基本的位操作计算余数。但我不知道该怎么做。所以我希望这里有人可以帮助我。

对于那些感兴趣的人,我正在根据 UNISIG-SUBSET 036 http://www.era.europa.eu/Document-Register/Documents/Set-2-Index009-SUBSET-036%20v300.pdf 编写 ETCS - 编码器在第 36 - 39 页,我正在尝试计算校验位。

最佳答案

假设您使用的是十进制,并且您想要计算 X mod Y,您可以这样做:

1. mod = 0;
2. mod = ((mod * 10) + mostCignificantDigit)%Y;
3. remove the mostCignificantDigit from your number, and return to 2.

换句话说,假设你有数字数组 A 中的数字:

mod = 0;
for (int index = 0; index < A.size(); ++index)
        mod = ((mod*10)+A[index]) %Y

关于c - 数字大于 2³² 的按位取模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20728709/

相关文章:

c - 什么时候在 GNU C 中使用分离线程?

c - C 中动态分配的二维数组

c - C 中的 Python itertools.product

ios - 将对齐数组 uint8[8] 转换为 double

c - int 变量在语句结果中声明为 double 后如何变化?

c - 具有恒定整数除数的高效浮点除法

c - C 中的 gets() 函数

php - CIDR 位运算 - 我可以更聪明一点吗?

c# - Bitwise Shift - 在 C#.net 与 PHP 中获得不同的结果

c# - 乘除固定比例小数的最有效方法