计算32位数中1的个数: unsigned long CountBit(unsigned long X) { X = (X & 0x55555555) + (X >> 1 & 0x55555555); X = (X & 0x33333333) + (X >> 2 & 0x33333333); X = (X & 0x0F0F0F0F) + (X >> 4 & 0x0F0F0F0F); X = (X & 0x00FF00FF) + (X >> 8 & 0x00FF00FF); X = (X & 0x0000FFFF) + (X >> 16 & 0x0000FFFF); return X; } 计算32位数的前导0的个数: //Counting Leading 0's int nlz(unsigned x) { int n; if (x == 0) return(32); n = 1; if ((x >> 16) == 0) {n = n +16; x = x <<16;} if ((x >> 24) == 0) {n = n + 8; x = x << 8;} if ((x >> 28) == 0) {n = n + 4; x = x << 4;} if ((x >> 30) == 0) {n = n + 2; x = x << 2;} n = n - (x >> 31); return n; }