我正在尝试找到两个16位二进制数的模数。我一次只能做8位。有没有办法在多个8位方程中划分16位模运算方程?
如果是的话,
我该怎么做?
答案 0 :(得分:1)
如果你有一个8位CPU,很可能它本身不能进行除法或模运算(你可能很幸运有一个乘数!),所以试图利用处理器来打破是没有意义的8位操作中的16位操作。 AFAIK,无论如何都无法做到这一点。你需要一点一点地进行除法。 (除法的大多数硬件实现也逐位进行除法,这是不可避免的。它不像可以并行完成的乘法。)。
我认为你需要实现“俄罗斯农民”方法,这里提到其他堆栈溢出文章:Fastest way to calculate a 128-bit integer modulo a 64-bit integer
我在这里贴了答案:
要查找余数,请执行(伪代码):
X = B;
while (X < A/2)
{
X <<= 1;
}
while (A >= B)
{
if (A >= X)
A -= X;
X >>= 1;
}
模数留在A。