package com.baidu.sep28;
import java.util.Scanner;
public class CountOne_2
{
public static void main(String[] args)
{
int input = 0;
Scanner in = new Scanner(System.in);//获取控制台输入
do{
System.out.println("请输入一个整数(可以为正数或负数):");
input = in.nextInt();//获取出入 并 传 给input
System.out.println("计算机中存储时1的个数为:"+getOneNumber (input));
}while(input!=0);//输入0 时 结束 (目的是为了 可以多次输入)
}
private static int getOneNumber(int input )
{
String binary = Integer.toBinaryString(input);//将输入的 整数转换成二进制 字符串形式
String new_string = binary.replaceAll("0", "");//将binary中的0 全部替换成空
return new_string.length();//将替换后 只有1的字符串个数 返回
}
}
运行 效果
统计bit上为1的个数最快的还是用汇编指令,一条指令就出来了。
发现1.5版起java也内置了
public int getOneNumber (int inputNumber){
return Integer.bitCount(inputNumber);
}
package com.baidu.sep28;
import java.util.Scanner;
/**java 实现 输入一个整数字(可以为正数或负数),求其在计算机中存储时1的个数。
*
*/
public class CountOne {
public static void main(String[] args)
{
int input = 0;
Scanner in = new Scanner(System.in);//获取控制台输入
do{
System.out.println("请输入一个整数(可以为正数或负数):");
input = in.nextInt();//获取出入 并 传 给input
System.out.println("计算机中存储时1的个数为:"+getOneNumber (input));
}while(input!=0);//输入0 时 结束 (目的是为了 可以多次输入)
}
private static int getOneNumber(int input )
{
int count = 0;//出现的次数 初始化为0
String binary = Integer.toBinaryString(input);//将输入的 整数转换成二进制 字符串形式
int index = -1;//将 索引初始化为-1
while((index =binary.indexOf("1",index+1))!=-1)
{
// 获取 : binary( 整数转换成二进制 字符串)从 index+1 角标开始(包含 index+1) 第一次出新1 的索引 并赋值给index
count ++;//计数器 加一
}
return count;
}
}
String b = Integer.toBinaryString(inputNumber);
String x = b.replaceAll("1","");
return b.length() - x.length();
??