我已经在C语言中将计算模数的成本最小化了。 假设我有一个数字x,n是将被x除的数字。
当n == 65536(恰好是2^16)时:
mod = x % n(由GCC产生的11条汇编指令) 或 mod = x & 0xffff,等同于mod = x & 65535(4个汇编指令)
所以,GCC没有对其进行如此程度的优化。
在我的情况下,n不是x^(int),而是小于2^16的最大质数,即65521。
正如我展示n == 2^16时那样,位运算可以优化计算。 当n == 65521时,我可以执行哪些位运算来计算模数。
%
实现为除了设置之外的单个指令IDIV
(请参见Krystian的答案)。 我毫不怀疑,在同一CPU上没有任何算法可以更快地获得结果。 - Carl Smotriczn
的声明中添加了const
关键字吗? - P Shved