只是一些抄来的trick而已

int lowbit(int x) {
    return x&(-x);//x&(~x+1),~x=-1-x;
}
int __builtin_ctz(unsigned int x)
int __builtin_ctzll(unsigned long long x)
返回x的二进制表示下最低位的1后面有多少个0 
int __builtin_popcount(unsigned int x)
int __builtin_popcountll(unsigned long long x)
返回x的二进制表示下有多少位为1

devil.