1

我想编写一条指令,在每次指令执行时将两个值转换为一个变量;这是一般情况:有两个值x1, x2i初始化为x1or ,在每次指令执行x2之间切换 i 值,即or,如果 i 初始化为 x2,x1x2i= x1, x2, x1 ...;i = x2, x1, x2, ...;

例如在 0 和 1 之间切换:i= 3 % (i+2);

如何编写通用x1, x2案例说明?

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对于所有人x以及0 ^ x == x.

所以当i == x1,

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

当 时i == x2x2sx2 ^ (x1 ^ x2)取消。

于 2013-01-10T11:19:15.900 回答
0

也许像这样简单

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

会成功的

于 2013-01-10T10:59:32.330 回答
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 回答