50字范文,内容丰富有趣,生活中的好帮手!
50字范文 > 利用位运算实现加减乘除

利用位运算实现加减乘除

时间:2023-04-05 04:17:23

相关推荐

利用位运算实现加减乘除

参考/dandingyy/archive//10/29/2745570.html和/hackbuteer1/article/details/7390093

面试必备。

#include<iostream>#include<cstdlib>using namespace std;//递归版本的加法实现int Add(int a, int b){return b ? Add(a^b, (a&b)<<1) : a;/*if(b)return plus_rec(a^b, (a&b)<<1);elsereturn a;*/}//该为迭代版本int Add_iter(int a, int b){int ans;while(b){ans = a^b;b = (a&b)<<1;a = ans;}return ans;}//求a的相反数:将各位取反加一int negative(int a)//get -a{return Add(~a, 1);}int Minus(int a, int b){return Add(a, negative(b));}//正数乘法int Multi(int a, int b){int ans = 0;while(b){if(b&1)ans = Add(ans, a);a = a << 1;b = b >> 1;}return ans;}//正数除法int Divide(int a, int b){int coun = 0;while(a >= b){a = Minus(a, b);coun = Add(coun, 1);}return coun;}//判断是否是负数,0,正数int isneg(int a){return a & 0x8000;}int iszero(int a){return !(a & 0xFFFF);}int ispos(int a){return (a&0xFFFF) && !(a&0x8000);}//处理负数的乘法和除法int My_Multi(int a, int b){if(iszero(a) || iszero(b))return 0;if(isneg(a)){if(isneg(b))return Multi(negative(a), negative(b));elsereturn negative(Multi(negative(a), b));}else if(isneg(b))return negative(Multi(a, negative(b)));elsereturn Multi(a, b);}int My_Divide(int a, int b){if(iszero(b)){cout << "Error!" << endl;exit(1);}if(iszero(a))return 0;if(isneg(a)){if(isneg(b))return Divide(negative(a), negative(b));elsereturn negative(Divide(negative(a), b));}else if(isneg(b))return negative(Divide(a, negative(b)));elsereturn Divide(a, b);}int main(int argc, char **argv){int a = 5;int aa = -5;int b = 3;int bb = -3;int c = 15;cout << Add(a, b) << endl;cout << Add(a, bb) << endl;cout << Minus(a, b) << endl;cout << Minus(b, a) << endl;cout << Multi(a, b) << endl;cout << My_Multi(aa, b) << endl;cout << Divide(c, a) << endl;return 0;}

View Code

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。