W***u 发帖数: 81 | 1 实现的方法是:
1. a^=b^=a^=b;
2. a^=b;
b^=a;
a^=b;
我以为1. 2. 是一样的,但事实上只有方法2才能实现两个值的交换,第一种方法只是a
的值赋给了b,然后a一直等于0.
求大神赐教! | l*********8 发帖数: 4642 | 2 在第一个方法里, 两次要用到的a可能一开始都就被放到寄存器里了。
这样,从右向左执行到最后一个xor的时候,还是用的原始的a,而不是更新的a'(= a^b
).
所以,最后一个xor就是 a^b', 也就是 a^a, that is 0.
是a
【在 W***u 的大作中提到】 : 实现的方法是: : 1. a^=b^=a^=b; : 2. a^=b; : b^=a; : a^=b; : 我以为1. 2. 是一样的,但事实上只有方法2才能实现两个值的交换,第一种方法只是a : 的值赋给了b,然后a一直等于0. : 求大神赐教!
|
|