码迷,mamicode.com
首页 > 其他好文 > 详细

求二进制数中有多少个1

时间:2018-09-11 14:20:36      阅读:148      评论:0      收藏:0      [点我收藏+]

标签:一个   val   语言   1的个数   解决   推出   多少   代码   bsp   

求一个 n 位的整数的二进制表式中有x个 1。

  • 样例:给定 32 (100000),返回 1;给定 5 (101),返回 2;给定 1023 (111111111),返回 9

  • 解决方法:num & (num-1) 可以每次将最右边的1消去,经过x次运算即可。

  • 原理:分类讨论、归纳总结

int countBit(int num){
    int count = 0;
    while(num != 0){
     num = num & (num-1);
         count++;
    }
    return count;
}

判断一个数的二进制数里面1的个数的奇偶性,偶数返回0,奇数返回1。

  • 样例:给定 32 (100000),返回 1;给定 5 (101),返回 0;给定 1023 (111111111),返回 1
  • 异或运算有如下规律,加上异或表判断即可。
  1. a^b = b^a
  2.  a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
  3.  d = a ^ b ^ c 可以推出 a = d ^ b ^ c
  4. a^b^a = b

C语言代码如下(关注点在val最低位的变化)

int odd(int x){
    int val = 0;
    while(x){
        val ^= x;
        x >>= 1;
    }
    return val & 0x1;
}

求二进制数中有多少个1

标签:一个   val   语言   1的个数   解决   推出   多少   代码   bsp   

原文地址:https://www.cnblogs.com/doublesand/p/9626941.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!