-
异或就是无进位相加。每一位对应相加,进位被舍弃。
A 01101110
B 10011101
->11110011
从低往高位:0加1是1,1加0是1,1加1有一个进位,结果为零,对于下一位,忽略进位,1加1还是0,有一个进位,再下一位,忽略进位,1加0结果为1.... -
异或运算满足交换律,结合律。同一批数字无论异或顺序如何,最终结果都是一个。
相加时每一位的1的数量不变,结果只和1的数量有关 -
0 ^ n=n(无进位相加),n^n=0.(每一位0+0=0,1+1=0(进位舍弃))。
-
设有一批数的异或结果为x,从中抽取任意位数,他们新的异或结果为y,那么剩余没被选中的数异或的结果为x^y。
条件:a^b=c --> a=c^b, b=c^a
将黑球视为1,白球视为0。那么题目可以看为0+1或1+01,0+0或1+10。与异或逻辑一致。最终结果就相当于这些球的异或和。只和黑球的数目(1的数量)有关。
异或运算交换两个数
#include<bits/stdc++.h>
using namespace std;
#define int long long
signed main()
{
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int a,b;
cin>>a>>b;
a=a^b;
b=a^b;
a=a^b;
cout<<a<<" "<<b<<endl;
return 0;
}
设a=甲,b=乙。
第一行 a=甲 ^ 乙;
第二行 b=甲 ^ 乙 ^ 乙 = 甲 ^ 0=甲
第三行 a=甲 ^ 乙 ^ 甲 = 0 ^ 乙=乙
异或运算交换位置两个位置的数必须不相同。否则同一位置的数会被刷成0.
标签:运算,结果,相加,一位,异或,进位 From: https://www.cnblogs.com/miao-jc/p/18064297