模运算转成位运算
实例七:模运算转成位运算
方法:n &(((1<<k)-1) 等价于 n %(2^k)
一个数除以一个2的k倍,即左移k位。
比如:15%4 n=15,k=2. k左移1位扩为4.再减一和n进行与操作。
解释:
2的几次幂就左移几位。
8 15
原数 0000 1100 0000 1111
4 0000 0100 0000 0100
4-1 0000 0011 0000 0011
&操作 0000 0000 0000 0011
如右边例子,-1的目的,保证了不整除情况下,后两位不为0;
int _tmain(int argc, _TCHAR* argv[])
{
int n,k,nResult = 0;
cout << "请输入原始的值:";
cin >> n;
cout << endl<< "请输入要移的位:";
cin >> k;
nResult = n&((1<<k)-1); //位操作符优先级低于算术运算符
cout << endl <<"余数:"<< nResult;
system("pause");
return 0;
}