0
点赞
收藏
分享

微信扫一扫

《剑指offer》第15题 二进制中1的个数

一、题目

输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。《剑指offer》第15题 二进制中1的个数_整型

二、题解

2.1循环按位比较法

知识点:

计算机的数字由二进制表示,我们平常的运算是对整个数字进行运算,但是还可以按照二进制的每一位分别进行运算。常见运算有位与、位或、移位、位异或等。

具体步骤:

  • step 1:遍历二进制的32位,通过移位0-31次实现。
  • step 2:将移位后的1与数字进行位与运算,结果为1就记录一次。

代码如下:

import java.util.*;
public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * @param n int整型 
     * @return int整型
     */
    public int NumberOf1 (int n) {
        // write code here
        int count = 0;
        for(int i = 0; i < 32;i++){
            if((n & (1 << i)) != 0){
                count++;
            }
        }
        return count;
    }
}

2.2位运算优化法

知识点:

利用一条性质:n & (n-1)会将n的二进制中的最后一位由1变成0.

具体步骤:

  • step 1:使用循环检查n是否为0.
  • step 2:不为0就与n-1做位与运算,去掉二进制最后一位的1,并统计次数。

代码如下:

public class Solution {
    public int NumberOf1(int n) {
        int res = 0;
        //当n为0时停止比较
        while(n != 0){  
            n &= n - 1;
            res++;
        }
        return res;
    }
}

举报

相关推荐

0 条评论