位运算在算法中的的若干问题
一:n的二进制表示第k位是几: n>>k&&1;
例题:输出n的二进制表示
#include <iostream>
using namespace std;
int main()
{
int n=10;
for(int i=3; i>=0; i--) cout<<(n>>i&1)<<' ';
return 0;
}
运行效果:
二:lowbit()函数,返回n的最后一个1;
例题:将给定的n去掉最后一个1
#include <iostream>
using namespace std;
int lowbit(int x)
{
return x&-x;
}
int main()
{
int n=10;
n-=lowbit(n);
for(int i=3; i>=0; i--) cout<<(n>>i&1)<<' ';
return 0;
}
运行效果:
注:-x=~x+1,即(x%-x)=(x&~x+1)
附:关于-x为什么要写成~x+1。在计算机里是没有减运算的,所有的减运算都必须通过加来实现,-x可以写成0-x,即00000000-x;也就是100000000-x,效果等同于~x+1;