int sum(int a, int b)
{
int exclusiveSum, carry;
int num1 = a, num2 = b;
do
{
exclusiveSum = num1 ^ num2;
carry = (num1 & num2)<<1;
num1 = exclusiveSum;
num2 = carry;
}while(num2 != 0)
return exclusiveSum;
}
- 其中 异或运算相当于对两个数进行 “不进位” 的加法,与运算并向左移一位得到两个数的加法进位,接下去重复上述过程,直到进位为零的时候结束。
- 不使用 新的变量 实现 两个变量的交换
- 通过加减法
void exchange(int &a, int &b)
{
a = a + b;
b = a - b;
a = a - b;
}
- 通过异或运算
void exchange(int &a, int &b)
{
a = a ^ b;
b = a ^ b;
a = a ^ b;
}
- 解说: 对同一个数进行两次异或运算 会 抵消掉
- 如:
a^b^b == a
网友评论