如何使用位操作来替换modulu和除法运算符?

Ole*_*aKL 6 c c++ module bit-manipulation division

我有这行代码:

 base_num = (arr[j]/base)%256;
Run Code Online (Sandbox Code Playgroud)

该行在循环中运行,操作"/"和"%"需要大量资源和时间来执行.我想更改此行并应用位操作以最大化程序性能.我怎样才能做到这一点?

谢谢.

1''*_*1'' 7

如果base是2的n次幂,则可以用n的右移位替换除以它的除法.然后,由于取整数的mod 256相当于取其最后的8位,因此可以将其与0xFF进行AND运算.或者,如果您使用256*base然后向右移位n,则可以反转操作.

base_num = arr[j] >> n;
base_num &= 0xFF;
Run Code Online (Sandbox Code Playgroud)

当然,任何半合半的编译器都应该能够为你做到这一点.

  • 这里有一个[新特权](http://stackoverflow.com/privileges/established-user):D (2认同)