位运算符简介
^: 按位异或;&:按位与; | :按位或
加法运算
- 不进位加法:sum = a^b;
- 进位加法: sum = (a&b) <<1;
- 所以可以递归计算所有的进位,等到进位完全加完就得到加法的结果。
减法运算
- 负数表示为:~x + 1。所以可以将减法转换为加上~x+1。
乘法运算
- a×b:乘法可以表示a个b相加。
除法运算
- a/b:可以表示为a最多能够减去b的个数。
实现
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
using namespace std;
//使用位运算实现加减乘除
int Add(int a, int b){
return b ? Add(a ^ b, (a & b) << 1) : a;
}
//减法:加上负数,负数为 ~b+1
int negative(int a){
return Add(~a, 1);
}
int Minus(int a,int b){
Add(negative(b), a);
}
//乘法:把b个a相加
int Mul(int a, int b){
int res =0;
bool isNegative = false;
if(a < 0){
isNegative = !isNegative;
a = -a;
}
if(b < 0){
isNegative = !isNegative;
b = -b;
}
while(a > 0 && b > 0){
res = Add(res, b);
a = Minus(a,1);
}
if(isNegative) res = -res;
return res;
}
//除法:看a最多能减去多少b
int Devide(int a,int b){
int res = 0;
bool isNegative = false;
if(a < 0){
a = -a;
isNegative = !isNegative;
}
if(b < 0){
b= -b;
isNegative = !isNegative;
}
while(a >= b){
res++;
a = Minus(a,b);
}
if(isNegative) res = -res;
return res;
}
int main(){
cout<< Add(100, 9)<<endl;
cout<<Minus(100,9)<<","<<Minus(9,100)<<endl;
cout<<Mul(100,9)<<","<<Mul(-100,9)<<endl;
cout<<Devide(100,9)<<","<<Devide(9,-100)<<endl;
return 0;
}