【发布时间】:2019-04-16 16:59:12
【问题描述】:
在 for 循环中确保整数值始终环绕 从 0 到最大 8 的相对更好/更正确的方法是什么? (我使用 32 次迭代,就像这里的示例)我找到了三个选项(A、B 和 C)
例子:
int x = 0;
const int max = 8; // EDIT: Always in the power of two.
for (int i = 0; i < 32; ++i)
{
// EDIT: "x++;" usage was incorrect here.
x = i;
// x = x % max; // A
// x &= max - 1; // B
// x &= ~max; // C (EDIT: Incorrect, dont use...)
std::cout << "x: " << x << std::endl;
}
还有其他建议吗?
编辑:性能至关重要,需要最快的解决方案。 我在一些第三方性能关键代码中看到了“x &= ~max”的使用。看起来他们使用这个技巧做了一个环绕。它是否有效或比其他解决方案更快?
谢谢。
【问题讨论】:
-
x %= max可能是最容易理解的。 -
你怎么知道它的性能至关重要?你量过吗?直觉就像掷硬币一样可靠,可以猜测哪些代码是关键的,哪些代码不是。
-
代码“x &= ~max”用于生产就绪的实时代码之一,所以我只是假设有一个原因。
标签: c++ operators bitwise-operators