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;
else
cout<<"error"<<endl;
}
}