返回数字中二进制位为'1'的个数

    技术2025-04-10  30

    写一个函数,返回数字中二进制位为'1'的个数。比如36,化为二进制得到100100,其中有2个'1'。方法1:分别判断各个位

    int  bit_count(unsigned  int  n) {    int count;    for(count = 0; n; n >>= 1)    {        count += n & 1;    }    return count;}

    方法2:循环中直接计算1的数量如何只数'1'的个数?如果一个数字至少包含一个'1'位,那么这个数字减1将从最低位开始依次向高位借位,直到遇到第一个不为'0'的位。依次借位使得经过的位由原来的'0'变为'1',而第一个遇到的那个'1'位则被借位变为'0'。36 d = 100100 b36-1 d = 100011 b如果最低位本来就是'1',那么没有发生借位。现在把这2个数字做按位与:n & n-1的结果是什么?2个数字在原先最低为'1'的位以下(包括这个位)的部分都不同,所以结果是保留了其他的'1'位。36 & 36-1 d = 100000 b这个结果刚好去掉了最低的一个'1'位

    int  bit_count(unsigned  int  n) {    int count;    for(count = 0; n; n &= n - 1)    {        count++;    }    return count;}

    最新回复(0)