二进制中1的个数(Java实现)

来源:互联网 发布:淘宝上的原创女装品牌 编辑:程序博客网 时间:2024/06/05 16:38

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


代码如下:

/* * 1.右移一位相等于除以2,但是不能用除法替代右移 *   因为除法的效率比移位运算要低得多,在实际编程中应尽可能地用移位算法替代乘除法 *  *  */public class Demo2 {public static void main(String[] args) {// System.out.println(solve1(15));System.out.println(solve2(-15));// System.out.println(Integer.toBinaryString(-15));}// 只能计算正数,负数会产生死循环public static int solve1(int n) {int count = 0;while (n != 0) {if ((n & 1) == 1)count++;n = n >> 1;}return count;}// 巧妙的解法:把一个整数减去1,再和原来的整数进行与运算// 会把该整数最右一个1变成0// 负数必须用补码表示!private static int solve2(int n) {int count = 0;while (n != 0) {count++;n = n & (n - 1);}return count;}}



0 0
原创粉丝点击