整数的二进制表示中有多少个1

xiaoxiao2021-02-28  86

public class NumberOf1 { /** * 算法思路: * 进行无符号右移, 无符号右移时, 会在前面补0 * 这种算法的弊端在于,要循环32次 * @param n * @return */ public static int count1(int n) { int result = 0; while(n != 0){ result += n&1; n >>>= 1; // 无符号右移,在前面补0 } return result; } /** * 解决思路:有几个1循环几次 * 每次去掉最右侧的1 * @param n * @return */ public static int count2(int n) { int result = 0; while(n != 0){ n= n & (n-1); result++; } return result; } /** * 解决思路:有几个1循环几次 * 每次去掉最右侧的1 * @param n * @return */ public static int count3(int n) { int result = 0; while(n != 0){ n -= n&(~n+1); result++; } return result; } public static void printNumBit(int n) { for (int i = 31; i != -1; i--) { if ((n & (1 << i)) != 0) { System.out.print(1); } else { System.out.print(0); } } System.out.println(); } public static void main(String[] args) { int num = 5; System.out.println(count1(num)); System.out.println(count2(num)); System.out.println(count3(num)); printNumBit(num); } }
转载请注明原文地址: https://www.6miu.com/read-77401.html

最新回复(0)