我正在为一个非常有限的系统编写一些代码,其中 mod 运算符非常慢。在我的代码中,模数需要每秒使用大约 180 次,我认为尽可能多地删除它会显着提高我的代码速度,截至目前,我的 mainloop 的一个周期不会以 1/60 的速度运行第二,它应该。我想知道是否可以仅使用位移来重新实现模数,就像乘法和除法一样。所以这是我迄今为止在 C++ 中的代码(如果我可以使用汇编执行模数,那就更好了)。如何在不使用除法或乘法的情况下删除模数?
while(input > 0)
{
out = (out << 3) + (out << 1);
out += input % 10;
input = (input >> 8) + (input >> 1);
}
编辑:实际上我意识到我需要每秒执行超过 180 次。看到输入的值可以是一个非常大的数字,最多 40 位。