c++ - 如何用位运算代替取模和除法运算?

标签 c++ c module bit-manipulation division

我有这行代码:

 base_num = (arr[j]/base)%256;

此行在循环中运行,操作“/”和“%”需要大量资源和时间来执行。我想更改此行并应用位操作以最大化程序性能。我该怎么做?

谢谢。

最佳答案

如果 base 是 2 的 n 次方,则可以用向右移动 n 位来代替除法。然后,由于取一个整数的 mod 256 等同于取它的最后 8 位,你可以用 0xFF 与它。或者,如果您将 AND 与 256*base 进行运算,然后将 n 向右移位,则可以反转操作。

base_num = arr[j] >> n;
base_num &= 0xFF;

当然,任何半正经的编译器都应该能够为您完成这项工作。

关于c++ - 如何用位运算代替取模和除法运算?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13569195/

相关文章:

c - 按 Enter 键停止 scanf

ruby - 如何在 Ruby 中初始化模块的实例变量?

c - C Pipe 中的 Unix Shell 问题

c++ - 当程序退出时,C++库实现如何分配内存但不释放内存?

c++ - 如何使用 GCC 4.3 在 -std=gnu++98 模式下使用 C99 数学函数?

c++ - C++ 中未定义的对库错误的引用

c++ - C/C++ 后置递增不止 1

c++ - 如何在 C++ 代码中调用模块中包含的 Fortran90 函数?

constructor - OCaml 中模块的构造函数范围

c++ - 如果我的类是文字类,那么将我的类的对象声明为 constexpr 是否多余?