您的位置:首页 > 编程语言 > C语言/C++

使用位操作实现加减乘除运算

2017-04-20 22:33 323 查看
前言

在实际应用中一定要注意边界问题,包括上边界和下边界

注意:

位操作中常用的公式

a=n&(n-1);//去掉n中最右边的1;
b=n&(-n);//得到n中最右边的1
-n==~n+1;
-n==~(n-1);

代码:
/*在正式应用中一定要注意边界问题,包括上边界和下边界*/
#include<iostream>
#include<map>
using namespace std;
int add(int a, int b)
{
if (a==0)
{
return b;
}
int carry = (a&b)<<1;
int adder = a^b;

return add(carry, adder);
}

int substract(int a, int b)
{
return add(a, -b);
}

int mulit(int a, int b)
{
bool _ = (a > 0)^(b > 0);
a = abs(a);
b = abs(b);
int ans=0;
map<int, int> bitmap;
for (size_t i = 0; i < 32; i++)
{
bitmap[1 << i] = i;
}
while (b>0)
{

int carry = bitmap[b&(-b)];
b = b ^ (b&(-b));
ans += a << carry;
}
return _ ? -ans : ans;
}
int divide(int a, int b)
{
bool _ = (a > 0)^(b > 0);
a = abs(a);
b = abs(b);
int ans = 0;
while (a >= b)
{
int m = 1;
int nb = b;
while ((nb<<1)<a)
{
nb <<= 1;
m <<= 1;
}
ans += m;
a -= nb;
}
return _ ? -ans : ans;
}
int main()
{
int a = -26;
int b = 3;
cout << "和:" << add(a, b) << endl;
cout << "差:" << substract(a, b) << endl;
cout << "积:" << mulit(a, b) << endl;
cout << "商:" << divide(a, b) << endl;
}结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c语言