一つ、タイトル説明
正の整数int型を入力し、INTはメモリ1に格納されるデータの種類の数で計算されます。
第二に、コードの実装
入力が正の数である場合は、そのことが(左の負の数の高い補数は、操作が行われた>> 1)0高の左側に追加します。、右のいずれかに>>>を使用する必要があります。
import java.util.Scanner;
//遍历次数为最左边的1所在位置(最右边的位为第一个)
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int input = sc.nextInt();
int countOfOne = 0;
while (input > 0) {
//if (input%2 == 1) {
//
//if (input & 1 == 1) {
//error: bad operand types for binary operator '&'
if ((input & 1) == 1) {
countOfOne++;
}
//input = input / 2;
//
//input = input >> 1;
//如果输入可以是负数,那么这里必须使用>>>
input = input >>> 1;
}
System.out.println(countOfOne);
}
}
}
もう一つの方法:
import java.util.Scanner;
//迭代次数为二进制中为1的位的个数
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int input = sc.nextInt();
int countOfOne = 0;
while (input > 0) {
countOfOne++;
input = input & (input - 1); //每一次消去最低位的1,有多少个1就迭代多少次
}
System.out.println(countOfOne);
}
}
}
APIは、文字列のバイナリ整数表現を使用して得られました:
import java.util.Scanner;
//遍历次数为最左边的1所在位置(最右边的位为第一个)
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNextInt()) {
int input = sc.nextInt();
String binaryStr = Integer.toBinaryString(input);
int countOfOne = 0;
//for (int i=0; i<32; i++) {
//存在数组越界等非法访问情况
for (int i=0; i<binaryStr.length(); i++) {
if (binaryStr.charAt(i) == '1') {
countOfOne++;
}
}
System.out.println(countOfOne);
}
}
}