美文网首页
10 二进制中1的个数

10 二进制中1的个数

作者: WalkZeRo | 来源:发表于2016-06-26 19:13 被阅读0次
    #include <stdio.h>
    
    int NumberOf1(int n)
    {
        int count = 0;
        while(n)
        {
            count++;
            n = (n-1) & n;
        }
    
        return count;
    }
    
    int NumberOf1_Solution2(int n)
    {
        int count = 0; 
        unsigned int flag = 1;
        while(flag)
        {
            if(n&flag)
                count++;
    
            flag = flag<<1;
        }
    
        return count;
    }
    
    //=======测试示例======
    void Test(int number, unsigned int expected)
    {
        int actual = NumberOf1(number);
        if(actual == expected)
            printf("Solution1: Test for %p passed.\n", number);
        else
            printf("Solution1: Test for %p failed\n", number);
    
    
        actual = NumberOf1_Solution2(number);
        if(actual == expected)
            printf("Solution2: Test for %p passed.\n", number);
        else
            printf("Solution2: Test for %p failed\n", number);
    }
    
    int main(void)
    {
        // 输入0,期待的输出是0
        Test(0, 0);
    
        // 输入1,期待的输出是1
        Test(1, 1);
    
        // 输入10,期待的输出是2
        Test(10, 2);
    
        // 输入0x7FFFFFFF,期待的输出是31
        Test(0x7FFFFFFF, 31);
    
        // 输入0xFFFFFFFF(负数),期待的输出是32
        Test(0xFFFFFFFF, 32);
    
        // 输入0x80000000(负数),期待的输出是1
        Test(0x80000000, 1);
    
    
        return 0;
    }
    

    结果:

    QQ截图20160626201117.png

    相关:

    • 判断一个整数是不是2的整数次方
      把这个整数减去1之后再和它自己做与运算,这个整数中唯一的1就会变成0

    • 输入两个整数m和n,计算需要改变m的二进制表示中的多少位才能得到n
      第一步求这两个数的异或;第二步统计异或结果中1的个数

    相关文章

      网友评论

          本文标题:10 二进制中1的个数

          本文链接:https://www.haomeiwen.com/subject/iofzdttx.html