是否有可能通过使用纯位加法,减法除以10的无符号整数,也许繁衍?使用资源非常有限且速度慢的处理器.
在我的程序中,我使用了很多整数除以10 ^ x和整数mod函数10.
例如:
unsigned __int64 a = 12345;
a = a / 100;
....
Run Code Online (Sandbox Code Playgroud)
要么:
unsigned __int64 a = 12345;
a = a % 1000;
....
Run Code Online (Sandbox Code Playgroud)
如果我要使用正确的位移>>,那么我将获得模式2^x,这不是我想要的.
有什么办法可以加速整数除法和mod函数的程序吗?
我用C计算模数的成本最小化.假设我有一个数字x而n是将x除以的数字
当n == 65536(恰好是2 ^ 16)时:
mod = x%n(由GCC生成的11个汇编指令)或
mod = x&0xffff,等于mod = x&65535(4个汇编指令)
因此,海湾合作委员会并未对此进行优化.
在我的例子中,n不是x ^(int),而是小于2 ^ 16的最大素数,即65521
正如我在n == 2 ^ 16中所展示的那样,逐位运算可以优化计算.当n == 65521计算模数时,我可以执行哪些按位操作.