码迷,mamicode.com
首页 > 编程语言 > 详细

Java 计算n对应的二进制位上有几个1,分别在什么位置

时间:2019-09-29 23:41:37      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:out   idt   blog   结束   stat   ring   int   对象   结果   

Java计算n的二进制位上有几个1,分别在什么位置
 
public List<Integer> getBinOneCount(int n){
    List<Integer> ar = new ArrayList<>();
    int index=0;
    while(n>0){
        int x=n&1<<index;
        if(x!=0){
            ar.add(index+1);
            n=n-(1<<index);
        }
        index++;
    }
    return ar;
}
 
 
public static void main(String[] args) {
    Test2 t = new Test2();
    System.out.println(t.getBinOneCount(10));
}
1:判断n是否大于0;
2:让n分别于2^0,2^1,2^2……2^index做 与操作,结果不为0代表n为上有1,记录到集合;
3:index 位上为1,则需要n减去2^index。
 
例如10
二进制 1010
 
 
index
n
&的对象
&的结果
list
&操作后n的值
0
1010
2^0=1=0001
0000
{}
1010
1
1010
2^1=2=0010
0010
{2}
1010-0010=1000
2
1000
2^2=4=0100
0000
{2}
1000
3
1000
2^3=8=1000
1000
{2,4}
1000-1000=0000 while结束
结果就是10 对应的二进制上有2个1,分别在从右往走数 第2和第4个(这里默认最右边为1)
 

Java 计算n对应的二进制位上有几个1,分别在什么位置

标签:out   idt   blog   结束   stat   ring   int   对象   结果   

原文地址:https://www.cnblogs.com/xlblog/p/11610364.html

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