1

命令を実行するたびに2つの値を変数に切り替える単一の命令を記述したいと思います。これは一般的なケースです。2つの値がx1, x2あり、またはにi初期化されている場合、命令の実行ごとにi値を切り替えます。つまり、iがx2に初期化されている場合は、x1x2x1x2i= x1, x2, x1 ...;i = x2, x1, x2, ...;

たとえば、0と1を切り替えます。i= 3 % (i+2);

x1, x2一般的なcase命令を作成するにはどうすればよいですか?

4

4 に答える 4

5

これはあなたが探しているものですか?

 i=(x1+x2)-i
于 2013-01-10T11:18:55.400 に答える
3

ビット演算は非常に高速なので、整数変数であれば、

type z = x1 ^ x2, i = x1;
// do something
while(...) {
    i ^= z;
    // ...
}

XOR は高速なソリューションです。

その背後にある秘訣は、XOR が結合的かつ交換可能でありx ^ x == 0、.x0 ^ x == x

だからいつi == x1

i ^= z ~> i = x1 ^ (x1 ^ x2) ~> i = (x1 ^ x1) ^ x2 ~> i = 0 ^ x2 ~> i = x2

および wheni == x2x2s はx2 ^ (x1 ^ x2)キャンセルします。

于 2013-01-10T11:19:15.900 に答える
0

たくさんの議論を通して、私はついにあなたが必要としているものに気づきました:)

これが私のソリューションのコードサンプルです:

#define x1 7
#define x2 11

int main(void )

{
  int a = 0;
  int val = x1;
  int xorFactor = x1^x2;

  printf("\n");
  for (a=0; a<10; a++) {
    val = val^xorFactor;
    printf("%d: %d\n", a, val);
  }

  return 0;
}
于 2013-01-10T11:26:15.703 に答える
0

おそらく、次のような単純なもの

i = (i==x1)?x2:x1;

トリックを行います

于 2013-01-10T10:59:32.330 に答える