swap(a, b)异或骚操作方法

众所周知,平日里我们如果要交换两个变量的时候,通常都是

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了吗

posted @ 2022-08-16 22:34  chris599  阅读(51)  评论(0编辑  收藏  举报