模运算转成位运算

实例七:模运算转成位运算


方法: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;
}

原文地址:https://www.cnblogs.com/gd-luojialin/p/6635569.html