首页 > 其他分享 >swap(a, b)异或骚操作方法

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

时间:2022-08-16 22:46:27浏览次数:68  
标签:temp int 操作方法 最终 值为 异或 swap

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

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

标签:temp,int,操作方法,最终,值为,异或,swap
From: https://www.cnblogs.com/chr1ce/p/16593284.html

相关文章

  • 子数组异或和(前缀和、哈希)
    题意给定一个长度为\(n\)的整数数组\(a_1,a_2,\dots,a_n\)。请你统计一共有多少个数组\(a\)的非空连续子数组能够同时满足以下所有条件:该连续子数组的长度为偶数。......
  • str常用操作方法
    s='taiBai's1=s.upper()print(s1)全部转化为大写  username=input('用户名')password=input('密码')code='QweA'print(code)your_code=input('请输入验......
  • [AcWing 4507] 子数组异或和
    异或的性质点击查看代码#include<bits/stdc++.h>usingnamespacestd;typedeflonglongLL;constintN=1e6+10;intn;inta[N];voidsolve(){......
  • Acwing 第 64 场周赛 C 4507. 子数组异或和(异或+前缀和)
    https://www.acwing.com/problem/content/4510/给定一个长度为n的整数数组a1,a2,…,an。请你统计一共有多少个数组a的非空连续子数组能够同时满足以下所有条件:该......