题目:

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

这个题目有个比较有意思并且被公认的解法,我就先贴答案吧:

public class Solution {public int NumberOf1(int n) {int count = 0;while(n!= 0){count++;n = n & (n - 1);}return count;}
}
我们来分析一下这个解法的巧妙之处: 
如果一个整数不为0,那么这个整数至少有一位是1。如果我们把这个整数减1,那么原来处在整数最右边的1就会变为0,原来在1后面的所有的0都会变成1(如果最右边的1后面还有0的话)。其余所有位将不会受到影响。
举个例子:一个二进制数1100,从右边数起第三位是处于最右边的一个1。减去1后,第三位变成0,它后面的两位0变成了1,而前面的1保持不变,因此得到的结果是1011.我们发现减1的结果是把最右边的一个1开始的所有位都取反了。这个时候如果我们再把原来的整数和减去1之后的结果做与运算,从原来整数最右边一个1那一位开始所有位都会变成0。如1100&1011=1000.也就是说,把一个整数减去1,再和原整数做与运算,会把该整数最右边一个1变成0.那么一个整数的二进制有多少个1,就可以进行多少次这样的操作。
牛客网编译通过截图:

JAVA实现输入一个整数,输出该数二进制表示中1的个数(《剑指offer》)相关推荐

  1. 输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示

    转自http://my.oschina.net/ithaibo/blog/142655 题目: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 题目引自http://ac.jobdu ...

  2. 输出该数二进制表示中1的个数。求取十进制数字元素1的个数 (3种方法)

    /* ***求取十进制数字元素1的个数 */int fun(int x) {int count = 0;int i, j, k;/***方法2 负数不可计算,需要改进*/while (x != 0){ ...

  3. python从键盘输入一个数、判断其是奇数还是偶数_从键盘上输入一个整数,判断该数是奇数还是偶数并输出结果...

    C语言:从键盘上输入一个整数,计算整数的各位数字之和 #includeintGetNumber(intn)//用递归来实现很简单{intsum=0;if(n/10!=0){\x09sum+=GetNu ...

  4. python 输入一个整数 输出百位及以上_Python二级编程:获取用户输入的一个整数,输出该整数百位及以上的数字...

    原博文 2020-02-04 18:19 − s=int(input("请输入一个整数:"))if 0 ... 相关推荐 2019-09-28 21:13 − Python pyt ...

  5. python让用户输入一个整数_PYTHON练习题 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数。...

    Python 练习 标签: Python Python练习题 Python知识点 二. 使用random中的randint函数随机生成一个1~100之间的预设整数让用户键盘输入所猜的数,如果大于预设的 ...

  6. C语言--编程将递增数列10、20、30、40、50、60、70、80、90、100保存到数组中,再从键盘输入一个整数,插入到该数列中,使之成为一个递增数列。

    源代码: #include <stdio.h> #define N 50int main(){int a[N]={10,20,30,40,50,60,70,80,90,100};int n ...

  7. 习题:编写一个二进制位查看器,要求程序运行时从命令行输入一个整数,将其在内存中的二进制位的形式输出出来。

    个人答案: (1)java import java.util.Scanner;public class 二进制 {public static void main(String[] args) {//输 ...

  8. 【数据结构与算法】二维数组中的查找(剑指offer)java版

    在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. 分析 ...

  9. python 第一行包含一个整数n、表示行数_输入 第一行输入一个整数n(1 = n = 100)表示测试样例个数 接下来n行,一...

    展开全部 #include #include #include #define STRLEN 100 void ifree(char**p,int i); int CheckAndChange(cha ...

最新文章

  1. 360浏览器使用评价
  2. Lazarus IOCP 移植
  3. swift项目第一天:环境部署
  4. python测试开发教程_文档测试
  5. Html5元素及基本语法
  6. 望城——民营经济的“旺城”
  7. spring boot 整合RESTFUL服务
  8. 网页中文乱码--UTF-8和GB2312互转
  9. css scale 缩放基准点
  10. 【转】搞机:window10安装Linux子系统(WSL)及迁移到非系统盘
  11. Java模板方法中规定传的参数,java – 如何在Kotlin中实现模板方法设计模式?
  12. Oracle客户端的卸载
  13. java通讯录 批量生成 .vcf文件, .csv文件批量生成 .vcf,手机自动导入
  14. 工具说明书 - 网页死链检测工具XENU及其名字来历
  15. matlab中switch函数用法
  16. HTTPS证书过期|SSL证书过期 |华硕路由器| NAS|Certtificate is not valid
  17. 怎么把avi转换成mp4?
  18. Comware: Port Link-mode Bridge vs Port Link-mode Route
  19. 遥感图像存储格式BSQ/BIL/BIP的理解
  20. 股票风险 股票交易上的投机行为往往十分危险。假设某股票行为十分怪异,每天不是涨停(上涨10%)就是跌停(下跌10%)。

热门文章

  1. iis 网页HTTP 错误 404.3 - Not Found解决方案
  2. 如何使用LocalDateTime解析/格式化日期? (Java 8)
  3. 该应用程序可能在其主线程上做过多的工作
  4. 如何将github存储库回滚到特定提交?
  5. 检查Bash Shell脚本中输入参数的存在
  6. 如何在Java中生成特定范围内的随机整数?
  7. JavaScript比较中应使用哪个等于运算符(== vs ===)?
  8. iOS使用shell脚本批量修改属性
  9. 当中台遇上DDD,我们该如何设计微服务?
  10. MyBatis入门(七)---逆向工程