我想编写一条指令,在每次指令执行时将两个值转换为一个变量;这是一般情况:有两个值x1, x2
并i
初始化为x1
or ,在每次指令执行x2
之间切换 i 值,即or,如果 i 初始化为 x2,x1
x2
i= x1, x2, x1 ...;
i = x2, x1, x2, ...;
例如在 0 和 1 之间切换:i= 3 % (i+2);
如何编写通用x1, x2
案例说明?
我想编写一条指令,在每次指令执行时将两个值转换为一个变量;这是一般情况:有两个值x1, x2
并i
初始化为x1
or ,在每次指令执行x2
之间切换 i 值,即or,如果 i 初始化为 x2,x1
x2
i= x1, x2, x1 ...;
i = x2, x1, x2, ...;
例如在 0 和 1 之间切换:i= 3 % (i+2);
如何编写通用x1, x2
案例说明?
这就是你要找的东西?
i=(x1+x2)-i
位运算非常快,所以如果它是一个整数变量,
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
sx2 ^ (x1 ^ x2)
取消。
也许像这样简单
i = (i==x1)?x2:x1;
会成功的
通过大量讨论,我终于意识到你需要什么:)
这是我的解决方案的代码示例:
#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;
}