美文网首页
《剑指offer第二版》题15:二进制中1的个数

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

作者: leilifengxingmw | 来源:发表于2022-04-25 17:54 被阅读0次

    题目:请实现一个函数, 输入一个整数,输出该数二进制表示中1的个数。例如把9表示成二进制是1001 ,有2位是1。因此如果输入9,则该函数输出2。

    解题思路:

    最简单的方式,将数字与1相与判断是不是1,然后将数字每次右移一位然后再次与1相与。

    注意:正整数二进制表示最高位是0,负整数二进制表示最高位是1。如果是负数的话,一直右移那么与1相与一直是1。怎么办呢?在Java中int是32位,我们只需要右移32次就可以了。

    /**
     * @param n
     * @return 数字二进制表示中1的个数
     */
    public static int numberOfOne(int n) {
        int result = 0;
        for (int i = 0; i < 32; i++) {
            result += (n & 1);
            /**
             * 这里用带符号右移和无符号右移都可以,因为循环移动32次就结束了,不会出现死循环的问题。
             */
            n >>= 1;
        }
        return result;
    }
    

    测试用例

    /**
     * -5在计算机中用补码表示是 1111 1111 1111 1111 1111 1111 1111 1011
    */
    System.out.println(numberOfOne(-5));
    System.out.println(numberOfOne(5));
    

    输出结果

    31
    2
    

    参考链接:

    相关文章

      网友评论

          本文标题:《剑指offer第二版》题15:二进制中1的个数

          本文链接:https://www.haomeiwen.com/subject/mfjdkltx.html