c - Shift 1和乘法vs直接移位



我在ARM CMSIS-NN库中遇到了类似的代码:

int32_t val, shift;
// code that initializes val and shift
int32_t result = val * (1 << shift);

,其目的是将val乘以两个值x的某个幂,其中shift为指数,即x=pow(2,shift)。为什么他们不简单地移动?就像

int32_t result = val << shift;

我错过了什么特别的东西吗?编译器能以某种特殊的方式优化前一个操作吗?

编辑:让我困惑的是,他们正在使用"简单的shift"。贯穿整个代码。此外,代码应该高度优化。但我猜现代编译器会自己弄清楚,这是转移的方式(而不是乘法)?

它总是符号正确,强制使用正确的FPU指令,并且可以处理任何类型的数据。

相关内容

  • 没有找到相关文章

最新更新