int count_one(unsigned long n)
{
//0xAAAAAAAA, 0x55555555分别是以“1位”为单位提取奇偶位
n=((n & 0xAAAAAAAA)>>1)+(n & 0x55555555);
//0xCCCCCCCC,0x33333333分别是以“2位”为单位提取奇偶位
n=((n & 0xCCCCCCCC)>>2)+(n & 0x33333333);
//0xF0F0F0F0,0X0F0F0F0F分别是以“4位”为单位提取奇偶位
n=((n & 0xF0F0F0F0)>>4)+(n & 0x0F0F0F0F);
//0xFF00FF00,0x00FF00FF分别是以“8位”为单位提取奇偶位
n=((n & 0xFF00FF00)>>8)+(n & 0x00FF00FF);
//0xFFFF0000,0x0000FFFF分别是以“16位”为单位提取奇偶位
n=((n & 0xFFFF0000)>>16)+(n & 0x0000FFFF);
return n;
}