二进制中1的个数(Java实现)
发布时间:2020-12-15 02:20:49 所属栏目:Java 来源:网络整理
导读:问题: 输入一个整数,求其二进制中1的个数 看到这个问题,我们应该想到数的 位运算 : 解法一:我们每次将此数1 ,如果结果等于1,证明此数的最后一位是1,,count++; 然后在将数右移一位, 循环下去,直到此数==0,即可统计出其中1的个数 Test1: 1 privat
问题: 输入一个整数,求其二进制中1的个数 看到这个问题,我们应该想到数的位运算: 解法一:我们每次将此数&1 ,如果结果等于1,证明此数的最后一位是1,,count++; 然后在将数右移一位, 循环下去,直到此数==0,即可统计出其中1的个数 Test1: 1 private static int getNum1(int i) { 2 int count=0; 3 while (i!=0){ 4 if((i&1)==1){ 5 count++; 6 } 7 i= i>>1; 8 } 9 return count; 10 缺点:这种情况只能适用于正整数,当为负数时,负数循环右移时是用1来填前面空缺的位置,所以永远都不会等于0,陷入死循环 解法二:我们的分析就是:把一个整数减去1。再和原整数做与运算,会把该整数最右边的一个1变成0.那么一个整数的二进制表示中有多少个1,就能够进行多少次运算。 基于这种思路。我们能够写出这种代码: Test2: private static int getNum1(int i) { int count=0; while (i!=0){ i=i&(i-1); count++; } return count; } 这样操作,无论数是正还是负都可以完美求出1的个数 解法三:我们调用Integer的方法,将i的二进制转为字符串,再依次遍历其中1的个数,也可以完美解决。 Test3: private static int getNum1(int i) { int count=0; String str=Integer.toBinaryString(i); for (int j = 0; j <str.length() ; j++) { if(str.charAt(j)==‘1‘){ count++; } } return count; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- java – 可序列化集合的通用参数
- 如何在Java中为Mac OS获取User~ / Library路径
- Java数据结构之简单的连接点(link)实现方法示例
- JAVA中使用JSON进行数据传递示例
- jbas015852无法索引类java.lang.IllegalStateException:未
- 从编辑距离、BK树到文本纠错
- 反射-Method-Java
- Jedis出现connection timeout问题解决方法(JedisPool连接池
- java – CDI构造函数注入不适用于瞬态非可序列化依赖项
- Nimbus:java.lang.ClassCastException:javax.swing.plaf.