kik*_*iki 11 c++ modulo processing-efficiency
有人告诉我,模运算符"%"和除运算符"/"在嵌入式C++中效率很低.
我怎样才能实现以下表达式:
a = b % c;
Run Code Online (Sandbox Code Playgroud)
我知道这可以使用以下逻辑来实现:
a = b - c;
while (a >= c) {
a = a - c;
}
Run Code Online (Sandbox Code Playgroud)
但我的问题是,与%运算符相比,这个代码涉及while循环是否足够有效?
谢谢,Kirti
没有什么比%运营商更有效率了.如果有更好的方法,那么任何合理的编译器都会自动转换它.当你被告知%并且/效率低下时,那只是因为那些操作很困难 - 如果你需要执行模数,那就去做吧.
有更好的方法可能有特殊情况 - 例如,mod的2的幂可以写成二进制或 - 但这些可能由编译器优化.
该代码几乎肯定会慢于您的处理器/编译器决定执行divide/mod.通常,基本算术运算符很难获得快捷方式,因为mcu/cpu设计者和编译器程序员非常擅长为几乎所有应用程序优化它.
嵌入式设备中的一个常见捷径(每个周期/字节可以产生差异)是将所有内容保留在base-2中以使用位移运算符执行乘法和除法,并按位和(&)执行模数.
例子:
unsigned int x = 100;
unsigned int y1 = x << 4; // same as x * 2^4 = x*16
unsigned int y2 = x >> 6; // same as x / 2^6 = x/64
unsigned int y3 = x & 0x07; // same as x % 8
Run Code Online (Sandbox Code Playgroud)