c++ - 在 C++ 中使用 % 运算符和/运算符的替代方法

标签 c++ modulo processing-efficiency

据说模运算符“%”和除法运算符“/”在嵌入式 C++ 中效率很低。

我怎样才能实现以下表达式:

a = b % c;

我知道这可以通过以下逻辑实现:

a = b - c;
while (a >= c) {
  a = a - c;
}

但我的问题是,与 % 运算符相比,这段涉及 while 循环的代码是否足够高效?

谢谢, 基尔提

最佳答案

除法和取模确实是代价高昂的硬件操作,无论您做什么(这更多地与硬件架构相关,而不是与语言或编译器相关),可能比加法慢十倍。

但是,在当前的笔记本电脑或服务器以及高端微 Controller 上,cache未命中通常比除法慢得多!

当除数是常量时,GCC 编译器通常能够优化它们。

您的简单循环通常比使用硬件除法指令(或执行此操作的库例程,如果硬件未提供)慢得多。我相信您避免除法并将其替换为循环是错误的。

您可能会调整您的算法 - 例如通过二次幂 - 但我不建议使用您的代码。请记住,过早的优化是邪恶的,所以首先尝试让您的程序正确,然后分析它以找到问题点。

关于c++ - 在 C++ 中使用 % 运算符和/运算符的替代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8132188/

相关文章:

python - 变量 +=% 可能或如何获取另一个数字之后的下一个数字间隔

python - Python中的模运算符

c++ - 在 C++ 中的函数名前使用符号的含义?

c++ - 用于共享内存拷贝的 cudaMemcpy2D

c++ - 控制 VS 2008/2010 中的尾随结构填充? (#pragma pack 还不够好)

c++ - vector 引用 C++

c# - 在循环数据时创建列表列?

从图中获取所有单个区域的算法

ios - 为给定字符串的所有字符突出显示字符串中的特定字符

database - 更新 MySQL 数据库中的动态表单字段