前言
在实际应用中一定要注意边界问题,包括上边界和下边界
注意:
位操作中常用的公式
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++代码实现示例。
9084

被折叠的 条评论
为什么被折叠?



