前导0和二进制1个数
int length(int num) {
int ret = 0;
if (num >> 16 == 0) {
ret += 16;
num <<= 16;
}
if (num >> 24 == 0) {
ret += 8;
num <<= 8;
}
if (num >> 28 == 0) {
ret += 4;
num <<= 4;
}
if (num >> 30 == 0) {
ret += 2;
num <<= 2;
}
if (num >> 31 == 0) {
ret += 1;
}
return ret;
}
int count(int num) {
num = (num & 0x55555555) + ((num >> 1) & 0x55555555);
num = (num & 0x33333333) + ((num >> 2) & 0x33333333);
num = (num & 0x0f0f0f0f) + ((num >> 4) & 0x0f0f0f0f);
num = (num & 0x00ff00ff) + ((num >> 8) & 0x00ff00ff);
num = (num & 0x0000ffff) + ((num >> 16) & 0x0000ffff);
return num;
}