首先可以把unsigned int数中的1的个数与0的个数改变与计算的实现:
</pre><pre name="code" class="cpp">/**********************************************************************
* * Copyright (c)2015,WK Studios
* * Filename: A.h
* * Compiler: GCC vc 6.0
* * Author:WK
* * Time: 2015 2 7
* **********************************************************************/
#include<iostream>
using namespace std;
#include <assert.h>
void Set_Bit(size_t * Int_Dat,size_t Posi,bool ch )
{
if(ch)
{
*Int_Dat |= (0x01<<(Posi-1));
}
else
{
*Int_Dat &= ~(0x01<<(Posi-1));
}
}
size_t Cal_Bit1(size_t d)
{
size_t n=0;
while(d )
{
if(d & 0x01)
{
++n;
}
d/=2;
}
return n;
}
size_t Cal_Bit0(size_t d)
{
size_t n=0;
while(d)
{
if(!(d%2))
{
++n;
}
d/=2;
}
return n;
}
size_t Cal_B1(size_t d)
{
size_t n=0;
while(d)
{
++n;
d&=(d-1);//末尾一位置0
}
return n;
}
size_t Cal_B0(size_t d)
{
size_t n=0;
while((d+1))
{
++n;
d |= (d+1);//末尾一位置1
}
return n;
}
void main()
{
cout<<"-----计算无符号整型中0或者1的个数-----\n";
unsigned int m=15;
cout<<"原数据:"<<m<<endl;
cout<<"0个数:"<<Cal_Bit0(m)<<endl;//这种计算忽略了前边的零
cout<<"1个数:"<<Cal_Bit1(m)<<endl;
cout<<"0个数:"<< Cal_B0(m)