我想编写一条指令,在每次执行指令时将两个值切换为变量;这是一般情况:将x1, x2
和i
两个值初始化为x1
或x2
,在x1
和x2
之间切换i值每个指令执行,即i= x1, x2, x1 ...;
或者,如果我被初始化为x2,i = x2, x1, x2, ...;
E.g。在0和1之间切换:i= 3 % (i+2);
如何编写通用x1, x2
案例指令?
答案 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;
}