每次执行指令时,如何编写单个指令将两个值切换为变量?

时间:2013-01-10 10:56:23

标签: c functional-programming generic-programming

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

E.g。在0和1之间切换:i= 3 % (i+2);

如何编写通用x1, x2案例指令?

4 个答案:

答案 0 :(得分:5)

这是你在找什么?

 i=(x1+x2)-i

答案 1 :(得分: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 == x2时,x2中的x2 ^ (x1 ^ x2)取消。

答案 2 :(得分:0)

也许就像

这样简单
i = (i==x1)?x2:x1;

会做的伎俩

答案 3 :(得分: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;
}