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

作者: Pam

出处: https://www.cnblogs.com/pam-sh/>

关于作者:网安在读

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出, 原文链接 如有问题, 可邮件(mir_soh@163.com)咨询.

原文地址:https://www.cnblogs.com/pam-sh/p/14555139.html