一、异或^
1、交换两个数:
'''c
void Swap(int &a, int &b)
{
if (a != b)
{
a ^= b;
b ^= a;
a ^= b;
}
}
'''
2、判断奇偶:
'''c
if(a^(a-1)==1){//奇数}
else{//偶数}
'''
3、改变符号:按位取反再加一
4、取绝对值:第一位是1的按位取反再加一,第一位是0的就不用动了!
5、有奇数个数,其中只有一个数出现一次,其他都出现两次,求该数;或者有奇数个数,只有一个数出现奇数次,别的都出现偶数次,求该数。
答案:把所有的数^到一起结果就是该数。
二、位移 << >>
1、乘2
a<<1
2、除2(取地板)
a>>1