求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算法实现