判断一个整数二进制中有多少个1
n & (n - 1)将n的二进制表示中的最低位为1的改为0
#include <iostream>
using namespace std;
int main()
{
int n;
while(cin >> n)
{
int sum = 0;
while(n)
{
n &= (n - 1);
sum ++;
}
cout << sum << endl;
}
return 0;
}
判断是否为2的幂:
1 1 & 0=0
2 10 & 01=0
4 100 & 011=0
8 1000 & 0111=0
16 10000 & 01111=0
#include <iostream>
#include <cstdio>
using namespace std;
bool fun(int v)
{
bool flag = 0;
if((v>0)&&(v&(v-1))==0)
flag = 1;
return flag;
}
int main(void)
{
int n;
while(cin>>n)
{
if(fun(n))
cout<<"yes"<<endl;
else
cout<<"no"<<endl;
}
return 0;
}