从来就没有救世主  也不靠神仙皇帝  要创造人类的幸福  全靠我们自己  

计算一个数中1的个数、0的个数

 

1. 求一个int数二进制中1的个数

(1)与1、右移   【正数、负数都可以(计算的是负数补码中1的个数)】

int a;
cin>>a;
int count = 0;
int n = sizeof(int)*8; //位数 for(int i=0;i<n;i++) { if(a&1 != 0) { //判断最低位是否是1 ++count; } a >>= 1; //右移一位 }
cout
<<count<<endl;

 

(2)右移相当于除以2

  判断最低位可用2取余;右移可用除以2   【此方法只适合于正数、无符号数】

int a;
cin>>a;
int count = 0;

while(a>0) {
   count += (a%2);
   a /= 2;
}

cout<<count<<endl;

 

(3)与上比其小1的数  【正数、负数都可以】

int a;
cin>>a;
int count = 0;
while(a!=0) {
    ++count;
    a &= (a-1);
}
cout<<count<<endl;

 

2. 求0的个数

(1)与1、右移

  如果与1为0,则计数加1;如果与1为1,判断下一位

 

(2)总的位数减1的个数

 

posted @ 2020-04-06 21:43  T,X  阅读(557)  评论(0编辑  收藏  举报