代码题(53)— 不用加减法做加法、交换两个变量
1、不用加减乘除做加法
剑指offer面试题47:不用加减乘除做加法
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
class Solution { public: int Add(int num1, int num2) { while(num2!=0) { int temp = num1 ^ num2;//求相加,不管进位 num2 = (num1 & num2)<<1;//求进位 num1 = temp; } return num1; } };
2、交换两个变量
不使用新的变量,交换两个变量的值。
(1)基于加法的方法
a = a+b; b = a-b; // 此时 a+b-b=a; a = a-b; // 此时 a+b-a=b;
(2)基于异或运算
a = a^b; // 找到二者的不同 b = a^b; // 二者不同与 b 相与得到 a a = a^b; //