标签:数加 count 情况 输出 比较 使用 函数 原理 code
请设计一个函数,输入一个数,输出该数二级制表示1的个数
例 :9的二级制表示为1001 有2位是1
此题主要考点是二进制的转换和位运算的灵活使用。 我列举一下三种方法实现:
方法一:消去1法(原理:N--1可以是N最低位的1为0,根据最低位的1后面都是0的特性,N &(N--1)可以消去最低位的1,直到消去最后一个1的时候,结果为0)
方法二: 循环32次,利用位运算逐位与1比较比较法
方法三:转换二进制的时候,对余数为1的情况进行累加
//方法一:消去1法 public static int f(int n){ int count=0; while(n!=0){ //结果为0的时候,说明没有1,不用消去 n=n&(n-1); // 消去1法 的核心 count++; //每消去一次1,计数加1 } return count; }
//方法二:利用循环32次,逐位比较 public static int f2(int n){ int count =0; for(int i=0;i<32;i++){ if(((n>>i)&1)==1){ //右移i位,让1和最低位进行与运算。 count++; } } return count; }
//方法三:转2进制的时,对余数为1的统计 public static int f3(int n){ int count=0; int shang=n; int yu; while(shang!=0){ //十进制转二进制的核心 yu=shang%2; //先求余数 shang=shang/2; //再求商 if(yu==1){ count++; //对余数为一的统计 } } return count; }
标签:数加 count 情况 输出 比较 使用 函数 原理 code
原文地址:https://www.cnblogs.com/songchengyu/p/12590308.html