将加法的某一项取负,便可以实现减法。(为了避免溢出,将中间变量定义为long long,long达不到要求)
用与(&)和左移(<<)计算进位,用异或(^)计算基本和(不包含进位)
用位操作实现加法的步骤为:
1、用两个数字的与和左移,判断有没有进位(非0,为有进位)。
2、若有进位,将基本和、进位作为相加的两个元素回到步骤1。
3、若没有进位,返回基本和
#include <iostream>
using namespace std;
int add(int a,int b)
{
int val;
while (val = ((a&b) << 1)) //判断有无进位
{
a = a^b; //基本和
b = val; //进位
}
return a^b;
}
int main()
{
cout << add(12,-5);
system("pause");
return 0;
}
#include <iostream>
using namespace std;
long long add(int a,int b)
{
long long base1 = a;
long long base2 = b;
long long jinwei;
while (jinwei = ((base1&base2) << 1))
{
base1 = base1^base2;
base2 = jinwei;
}
return base1^base2;
}
int main()
{
cout << add(1,INT_MAX);
system("pause");
return 0;
}