我有几个小程序需要在整数集Z sub n 上无限循环。我经常在这个庄园里写代码:
int x = 0;
int n = 13; //or some other prime
while(1) {
//do stuff dependent on x
++x;
x %= n;
}
我主要用 C/C++ 和 Java 编写代码,所以我想知道:
有没有办法在一行中增加 x mod n 而不是在任何一种语言中增加两个?
x = (x + 1) % n;
不足为奇。
你有没有考虑过:
x = (x + 1 == n ? 0: x + 1);
有可能x + 1
会针对一条指令进行优化,并且至少可以保证您永远不会使用除法(当%
涉及到时,一个糟糕的优化器可能会使用它)。
另一种选择是这个
x = ++x % n; // Java
if (++x == n) x = 0;
使用x = (x + 1 == n ? 0 : x + 1);
需要两个加法:一个用于比较,另一个用于将 的值x
设置为x + 1
。