一.异或 运算:无进位相加
应用:1.不申请额外空间,交换两个数
int a, b;
a = a^b;
b = a^b;
a = a^b;
2.提取最右边的1
int n;
int rightOne = n & (~n + 1);
例如:
n :11010100;
~n :00101011;
~n+1 :00101100;
n&(~n+1):00000100;
3.无进位相加,抹去最右边的1
int n;
int rightOne = n & (~n + 1);
int newN = n ^ rightOne;
例如:
n :11010100;
~n :00101011;
~n+1 :00101100;
n&(~n+1):00000100;
n^(n&(~n+1)):11010000;
二.移位 运算
应用:1. 移位运算计算 2*n + 1
int n;
n = n << 1 | 1