如何用位运算比较二进制数中1和0的个数
遇到一道题,要确定的一个数的二进制表示中1多还是0多,见识了位运算的神奇之后就纠结这道题能不能用位运算……
能。下面给一段不计算前导0的代码。带前导0的计算有更有趣的算法
//cal返回值为数中1与0的数量差
int cal(unsigned int a)
{
int c;
if(a == 0) return -1;
for(b0 = b1 = 0; a; a >>= 1)
if(a & 1) c++; else c--;
return c;
}