位运算实现交换以及四则运算

来源:互联网 发布:java抽象方法的作用 编辑:程序博客网 时间:2024/06/13 03:41

1、位运算实现数字的交换

void Swap(int &a,int &b){int c = a ^ b;b = c ^ b;a = c ^ a;}void main(){int a = 10;int b = 20;Swap(a,b);cout<<a<<" "<<b<<endl;}
2、位运算实现加法

int Add(int a,int b){int c;int sum;do{sum = a ^ b;c = (a & b) << 1;a = sum;b = c;}while(c);return sum;}void main(){int a = 10; int b = 20;cout<<Add(a,b)<<endl;}

3、位运算实现减法

int Add(int a,int b){int c;int sum;do{sum = a ^ b;c = (a & b) << 1;a = sum;b = c;}while(c);return sum;}int Sub(int a,int b){b = ~b;b = Add(b,1);return Add(a,b);}void main(){int a = 20;int b = 10;cout<<Sub(a,b)<<endl;}
4、实现乘法

int Add(int a,int b){int c;int sum;do{sum = a ^ b;c = (a & b) << 1;a = sum;b = c;}while(c);return sum;}int Mul(int a,int b){int mul = 0;for(int i = 0; i < b; ++i){mul = Add(mul,a);}return mul;}void main(){int a = 10;int b = 20;cout<<Mul(a,b)<<endl;}
5、除法类似,就是利用减法,或者直接利用加法,确定需要累加的个数。

6、判断一个数是不是2的幂次方

bool Is_two(int tmp){int i = 1;while(i <= tmp){if(i & tmp && (i ^ tmp) == 0)return true;i <<= 1;}return false;}void main(){int tmp;while(cin>>tmp,tmp != -1){if(Is_two(tmp))cout<<"true"<<endl;elsecout<<"error"<<endl;}}





原创粉丝点击