首页 > 其他 > 详细

查找二进制中1的个数--位运算

时间:2019-12-25 17:30:15      阅读:88      评论:0      收藏:0      [点我收藏+]

1、常见位运算符号

https://blog.whezh.com/bit-hacks/

2、常用位运算技巧

技术分享图片

 

 

 3、输入一个数求该数的二进制中1的个数

  法一:将1左移判断

设置一个循环,循环32次(因为int型长度是32位,如果long型就循环64,类推),每次让1左移一位,然后和输入的数进行与运算(和1进行与运算,结果取决于输入数的二进制位,是1结果就是1,0结果就是0),再比较
 //从后往前移动1逐个比对
    public static int doAfter(int num){
        int count=0;
        for (int i=0;i<32;i++){//32表示整形的二进制长度(包括符号位)
            if ((num & (1<<i)) ==(1<<i)){  //num&(1<<i) 是把1逐步右移,和num与,如果num二进制这一位是1的话,结果还是1,是0结果就是0; 再和(1<<i)比较是否等于1
                count++;
            }
        }
        return count;
    }

  法二:输入的数右移判断

//从前往后>>>逐个比对
    public static int doFront(int num){
        int count=0;
        for (int i=0;i<32;i++){  //假设是1010,第一次从0开始不动,1右移变成0101,与运算成立,count+1,第二次,0010,不符合,第三次,0001,符合,count++
            if (((num>>>i)&1)==1){
                count++;
            }
        }
        return count;
    }

  法三、消除二进制中的1,统计消除的次数

(x-1)&x的作用就是消除尾部的1

    01010111    (x)
&   01010110    (x-1)
   ------------
    01010110
 //利用消除1的操作进行统计
    public static int remove1(int num){
        int count=0;
        while (num!=0){  //等于0说明已经没有1可以消除了
            num=(num-1)&num; //后面这个作用是消除尾部的1
            count++;
        }
        return count;
    }

查找二进制中1的个数--位运算

原文:https://www.cnblogs.com/han200113/p/12097834.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!