昨天突然看到一个算法题:一个正整数a的二进制中0的个数;
话说这是个老题了,直观的算法就每次右移一位,直到0为止;代码就省略了;
仔细想想有更好的方案么?
就是这个题可以转换成一个正整数~a的二进制中1的个数; 求1的个数这个貌似就很熟悉了吧;
int num = 0;
b = ~a;
while(b){
num++;
b = b & (b-1);
}
是不是容易了许多呢
另外像java和python这种没有unsigned的语言要自己去转
b = ~a & 0x0ffff