求A mod B
要求
B必须是2的次方
方法
A mod B = A & (B - 1)
程序
#include <stdio.h>
//10 mod 8 = 2
int addM(int a,int b)
{
return a & (b-1); // mod(2^31-1)
}
int main()
{
int result;
int a=10;
int b=8;
result = addM(a,b);
printf("%d mod %d = %d
",a,b,result);
return 0;
}
原理
求教~
求 A mod (2^31 -1)
方法1
result = (A & 0x7FFFFFFF) + 1;
参考ZUC代码
求解原因?
方法2

result = (A & 0x7FFFFFFF) + (A >> 31)
参考ZUC国密标准
求解原因?
扩展:求 ab mod (2^31 -1)

参考
2、ZUC算法实现