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 を 2 行ではなく 1 行でインクリメントする方法はありますか?

4

4 に答える 4

5

次のことを検討しましたか。

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

1 つの命令に最適化する可能性がx + 1あり、少なくとも除算を使用しないことが保証されます (これは、悪いオプティマイザー%が関与する場合に使用する可能性があります)。

于 2012-12-08T01:08:02.900 に答える
5
x = (x + 1) % n;

それほど驚くべきことではありません。

于 2012-12-08T00:56:32.313 に答える
3

別の代替手段はこれです

x = ++x % n;  // Java
于 2012-12-08T01:05:37.637 に答える