爱运动,爱看书,爱生活!
分类: C/C++
2013-04-01 11:55:32
位运算做加法:分析
00101 5
^
10001 17
=
10100
00101 5
&
10001 17
=
00001
<<1
=
00001
此处调用递归就实现了
10100
^
00010
=
10110 22
有了这些分析之后,就不难写出如下的代码了:
#include
using namespace std;
//做加法
int add1(int a,int b)
{
if(b==0)
return a;
int sum=a ^ b;
int total=(a & b)<<1;
return add1(sum,total);
}
int main()
{
cout<<"请输入两个数:"<
int dw1;
int dw2;
cin>>dw1>>dw2;
cout<
}
位运算交换数值:分析
令a=1,b=2
二进制:
a=1,b=10
第一步:
a=a^b
01
^
10
=11
第二部
b=a^b
11
^
10
=01
第三步:
a=a^b
11
^
01
=10
此时a=2,b=1
C++实现
#include
using namespace std;
//交换
void exchange(int *a,int *b)
{
if(*a==*b) return;//当a=b时会发生错误:这时相当于a自己做了三次异或,所以在交换之前要先判断两个数是否相等
*a=*a^*b;
*b=*a^*b;
*a=*a^*b;
}
int main()
{
cout<<"请输入两个数: "<
int dw1,dw2;
cin>>dw1>>dw2;
cout<<"dw1="<
exchange(&dw1,&dw2);
cout<<"dw1="<
}