求一个整数中,二进制数含有1的个数
(1) 方法1
将整数依次向右移动一位,判断最后一位是0还是,但是这样做的话,可能导致负数无法正常表示
(2) 方法2
对1进行左移,判断。
(3) 方法3
求操纵n & n-1 ,这个操作实质上是将n的最右为1的数字,变为0,
所以 n中有几个1,就可以执行几次n & n -1操作
#include <iostream>
using namespace std ;
int solusion1(int n)
{
int sum = 0 ;
while(n)
{
sum += n&1 ;
n = n>>1 ;
}
return sum ;
}
int solusion2(int n)
{
int sum = 0 ;
int flag = 1 ;
while(flag)
{
if(flag & n)
sum += 1 ;
flag = flag << 1 ;
}
return sum ;
}
int solusion3(int n)
{
int sum = 0 ;
while(n)
{
sum++ ;
n = n & (n-1) ; //操作实质上是,将最右边的一处1,置为0
}
return sum ;
}
int main()
{
cout<<solusion2(-7)<<" "<<solusion3(-7)<<endl ;
system("pause") ;
return 0 ;
}