众所周知,平日里我们如果要交换两个变量的时候,通常都是
void swap(int a, int b)
{
int temp = a;
a = b;
b = temp;
}
通过创建temp变量,保存其中一个的值,再交换两个变量的值
那么,有木有什么操作是更骚的呢
有!
void swap(int a, int b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
大家可能看不懂,我来解释一下。
大家小学二年级都学过 ^ 异或运算,异或运算中的几个常用的性质有:
0x01. 0异或任何数,都是该数;
0x02.任何数与自己异或结果都是0;
0x03.异或运算有交换律和结合律。
那么,
第一行,a最终值为a^b,b最终值为b。
第二行,a最终值为a^b,b最终值为a^b^b=a。
第三行,a最终值为a^b^a=a^a^b=b,b最终值为a。
是不是很骚,你get了吗