题3:二进制中1的个数
Posted 木原纺
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了题3:二进制中1的个数相关的知识,希望对你有一定的参考价值。
题目描述:
请设计一个函数,输入一个数,输出该数二级制表示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; }
以上是关于题3:二进制中1的个数的主要内容,如果未能解决你的问题,请参考以下文章