Number Swapper: Write a function to swap a number in place (that is, without temporary variables).
Hints: #492, #716, #737
解法1
用减法,代码:
|
|
解法2
用XOR:
|
|
代码:
|
|
关于XOR:对0
XOR的结果和原来一样,对1
XOR的结果肯定是翻转bit。
第一步flag = a ^ b
,得到两者的异同flag,0
代表相同,1
代表不同。
第二步b = flag ^ b
,则是把b中和a相同的部分保留,和a中不同的部分翻转,也就是变成a,最终b彻底变成a。
第三步a = flag ^ b
,因为b已经变成了a,那么做的事情就和第二步一样了,把a(由现在的b持有)中和b相同的部分保留,不同的部分翻转,最终彻底变成b。
评论