5

我有几个小程序需要在整数集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 而不是在任何一种语言中增加两个?

4

4 回答 4

5
x = (x + 1) % n;

不足为奇。

于 2012-12-08T00:56:32.313 回答
5

你有没有考虑过:

x = (x + 1 == n ? 0: x + 1);

有可能x + 1会针对一条指令进行优化,并且至少可以保证您永远不会使用除法(当%涉及到时,一个糟糕的优化器可能会使用它)。

于 2012-12-08T01:08:02.900 回答
3

另一种选择是这个

x = ++x % n;  // Java
于 2012-12-08T01:05:37.637 回答
2

if (++x == n) x = 0;

使用x = (x + 1 == n ? 0 : x + 1);需要两个加法:一个用于比较,另一个用于将 的值x设置为x + 1

于 2018-08-28T18:59:01.503 回答