题目描述:输入一个整数,输出该数二进制表示中 1 的个数。
正数的补码还是原码,负数的补码为原码+1.负数的二进制时候,是补码表示的
解题思路:题目要求是证书,因为题目给出的是int类型,java中的int类型用32位表示,把这个数依次无符号右移(考虑到负数所以选择无符号右移)然后与1作与运算。如果结果为1则count自增。
- public class Solution{
- public int NumberOf1(int n){
- int sum = 0;
- for(int i=0;i<32;i++){
- if((n>>i&1)==1)
- sum++;
- }
- return sum;
- }
- }
下面代码是只考虑正数,但是当为负数的时候,是补码表示的:
public class BinaryOne15_78 {
/**
* ycy
* 题目描述:
* 输入一个整数,输出该数二进制表示中 1 的个数。
*/
- public static int numOne(int n){
- int count = 0, temp = 0;
- int array[] = new int[20];
- int size = 0;
- if(n==0) return 0;
- while(n>=1){
- temp = n%2;
- n = n/2;
- array[size++] = temp;
- if(temp == 1){
- count++;
- }
- }
- System.out.println("二进制: ");
- for(int i=size-1;i>=0;i--){
- System.out.print(" "+array[i]);
- }
- return count;
- }
- public static int numOneInt(int n){
- return Integer.bitCount(n);
- }
- public static void main(String[] args) {
- // TODO Auto-generated method stub
- int n=42;
- int count = numOne(n);
- System.out.println("第一种对应1的个数: "+count);
- int count2 = numOneInt(n);
- System.out.println("第二种对应1的个数: "+count2);
- }
- }