二进制中1的个数——剑指offer

来源:互联网 发布:com域名 编辑:程序博客网 时间:2024/06/06 20:22

题目描述

输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。

public class Main12 {/** * 该方法没有考虑到负数的情况,如果是负数就会死循环 * @param n * @return */public static int NumberOf1(int n) {int sum = 0;while (n != 0) {if ((n & 1) != 0)sum++;n = n >> 1;}return sum;}/** * 该方法为了避免死循环,首先把n和1与运算,判断n的最低位是不是1, * 接着把1左移一位得到2,判断n的次低位是不是1.。。。 * 缺点是不管n的值是多少都要循环32次 * @param n * @return */public static int NumberOf2(int n) {int sum = 0;int flag = 1;while (flag != 0) {if ((n & flag) != 0)sum++;flag = flag << 1;}return sum;}public static int NumberOf3(int n) {int sum = 0;while (n != 0) {sum++;n = n & (n - 1);}return sum;}public static void main(String[] agrs) {System.out.println(NumberOf3(5));}}
最后一种方法



0 0
原创粉丝点击