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

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

23:⼀个整数的⼆进制表⽰中有多少个1
题⽬:
⼀个整数存储在内存中,输出它的⼆进制表⽰中1的个数
思路:
要判断这个整数的⼆进制表⽰中1的个数,联想到这是[位运算]的题⽬。

最先想到巧妙利⽤[1]这个数,[1]只有最右⼀位是1,其他位均为0;
所以,接下来应该想到,⽤“1”和这个整数做[与运算],⾸先可以判断最右边⼀位是不是1,以此类推,该整数每右移⼀位,和1做与运算,直到该整数变为0.⾄此,问题思路已有,但是考虑⾮正常数字,⽐如[负数],该⽅法就不适⽤,因为负数⼆进制需要保持最⾼位⼀直为1,最后会陷⼊死循环(OXffffffff)前⾯的思路中,两个数与运算,那能否让[1]进⾏左移位,⽽原整数不动,这样可以判断次⾼位是否为1.以此[1]继续左移.
还有⼀种思路,⼀个不为0的整数i,⾄少有⼀位为1,做这样的操作:
i-1 得到的结果是整数i的最右边⼀位1的右边所有原来为0的位都变为1,1这⼀位变为0,即减1后最右边1之后的所有位都取反了;然后把它和i做与运算,结果是将最右边⼀位1之后的所有位都变为0了,所以,反复这样的步骤,做多少次减1的操作,i的⼆进制表⽰就有多少个1,直到多次减1后i变为0.
另:清除最右边⼀位为0 的⽅法:
i=i&(i-1)
package prctice01;
/*题⽬:
⼀个整数存储在内存中,输出它的⼆进制表⽰中1的个数*/
import java.util.Scanner;
public class numberof1 {
public static void main(String[] args){
Scanner in = new Scanner(System.in);
while(in.hasNext())
{
int input = in.nextInt();
int count = 0;
while(input!= 0)
{
input=input&(input-1);
count++;
}
System.out.println(count);
}
}
//i=i&(i-1)
}。

相关文档
最新文档