编写一个函数,不用临时变量,直接交换两个数。
很经典的一道题目,先直接给代码,然后再证明。
1 | static void Swap(ref int a, ref int b) |
因为是bit操作,所以我们针对每个bit证明即可,不妨设a和b只有1个bit,总共只有4种可能性,使用穷举法来证明。
1 | 原始a 原始b 第一行a 第二行b 第三行a |
可以看出来,原始a和第二行左边的b是一样的,也就是最后的b值和初始的a值一样;原始b和第三行左边的a是一样的,也就是最后的a值和最初的b值一样。
综上,交换了a和b的值。
但是,这个解法有个bug,如果传入的是同一个地址呢?位异或操作后得到了0!