求mod运算

求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\n",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)

参考

 1、如何用C中的运算符求mod(2的次方)?

 2、ZUC算法实现

posted @ 2021-03-25 13:50  PamShao  阅读(281)  评论(0编辑  收藏  举报