剑指offer 10题 【位运算】二进制中1的个数

来源:互联网 发布:免费淘宝手机模板 编辑:程序博客网 时间:2024/06/05 18:42

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
牛客传送门:点击打开链接


public class Title10 {    /**     * 普通解法,将一不断地左移,然后与n进行与运算,如果结果不为0,则加一。     */    public int  NumberOf1(int n) {        int count = 0;        int test = 1;                while(test != 0){            if((n & test) != 0)                count ++;            test = test << 1;        }        return count;    }        /**     * 最优解     */    public int  NumberOf1(int n) {        int count = 0;                while(n != 0){            n = n & (n-1);            count++;        }        return count;    }        /**     * 测试     */    public static void main(String[] args) {        // 10000000 00000000 00000000 00000000 一的个数为1        System.out.println(new Title10().NumberOf1(0x80000000));        // 11111111 11111111 11111111 11111111 一的个数为32        System.out.println(new Title10().NumberOf1(-1));    }}


0 0
原创粉丝点击