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

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)

借鉴 https://www.cnblogs.com/Free-Thinker/p/7241054.html

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

时间: 2024-10-09 08:53:28

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

用Java计算某个日期100天后的日期

用Java计算日期时间,首先考虑到时间类,Java中提供的和时间日期相关的类里,有一个Calendar类,可以获取某个时间日期. 计算某个日期100天后的日期,思路如下: 1.先设定时间,例如2017年1月1日: 2.在给定日期的天数上增加100: 具体代码如下: 1 /* 2 * 1.先给定一个时间,例如2017年1月1日 3 */ 4 Calendar cld = Calendar.getInstance(); 5 cld.set(Calendar.YEAR, 2017); 6 cld.se

【转】Java计算文件的hash值

原文地址:http://blog.csdn.net/qq_25646191/article/details/78863110 如何知道一个文件是否改变了呢?当然是用比较文件hash值的方法,文件hash又叫文件签名,文件中哪怕一个bit位被改变了,文件hash就会不同. 比较常用的文件hash算法有MD5和SHA-1.我用的是MD5算法,java中,计算MD5可以用MessageDigest这个类. 下面是代码: [java] view plain copy package com.test;

Java 计算中英文长度的若干种方法

在项目开发中经常碰到到输入字符的校验,特别是中英文混合在一起的校验.而为了满足校验的需求,有时需要计算出中英文的长度. 本文将通过几种常用的方法实现长度的计算: <span style="font-size:18px;">import java.io.UnsupportedEncodingException; /** * 中英文校验的处理 * @author a123demi * */ public class EnChValidate { public static vo

Java实现HTML5拖拽文件上传

这是主页面 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+reques

java计算两日期间隔小时或分钟

public static void main(String[] args) {        try {            long min = dateDiff("2014-05-27 13:30:00","2014-05-27 13:00:00","yyyy-MM-dd HH:mm:ss");            System.out.println("---------相隔分钟数: "+min);        

如何快速配好java环境变量和查看电脑上安装JDK的版本位数

[java] view plaincopy 今天一个新手在群里问自己的Eclipse打不开,然后我是属于那种热心肠的人,一般自己知道的就会告诉他们,看了下,是环境变量没有配好,反正我觉得配环境比较简单,现在就教大家简单的环境变量配法 path ----- 输入jdk里面bin的目录,例如D:\mtools\win32-x86\java\jdk1.7.0\bin classpath   ------直接输入一点 注意是"." OK 然后在cmd下面输入java -version 我告诉他

java以及C#获取AD域上用户信息

JAVA /** *  JAVA 读取AD用户信息 *  aa00a00 */package com.wanda.sso.client.servlet; import java.util.Hashtable; import javax.naming.Context;import javax.naming.NamingEnumeration;import javax.naming.NamingException;import javax.naming.directory.Attribute;imp

JSch - Java实现的SFTP(文件上传详解篇) 转

JSch是Java Secure Channel的缩写.JSch是一个SSH2的纯Java实现.它允许你连接到一个SSH服务器,并且可以使用端口转发,X11转发,文件传输等,当然你也可以集成它的功能到你自己的应用程序. 本文只介绍如何使用JSch实现的SFTP功能. SFTP是Secure File Transfer Protocol的缩写,安全文件传送协议.可以为传输文件提供一种安全的加密方法.SFTP 为 SSH的一部份,是一种传输文件到服务器的安全方式.SFTP是使用加密传输认证信息和传输

java模拟post方式实现图片上传

package com.yanek.util; import java.io.BufferedReader; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.InputStreamReader; import java.io.OutputStream; import java.ne