IT公司100题-28-整数的二进制表示中1的个数
2016-01-08 15:29
417 查看
问题描述:
输入一个整数n,求n的二进制表示中,一共有多少个1。例如n=8,二进制表示为00001000,二进制表示中有1个1。
分析:
如果一个数n不为0,那么n-1的二进制表示,与n的二进制表示相比,n的二进制表示最右边的1变为0,而最右边的1所对应的0全部变为1。其余位不受影响。
例如:n的二进制表示为****1000,则n-1的二进制表示为****0111,则n&(n-1)的二进制表示为****0000。将n二进制表示中最右边的1去掉了。
将n赋值为n&(n-1),继续循环此操作,直到n为0。
代码实现:
输入一个整数n,求n的二进制表示中,一共有多少个1。例如n=8,二进制表示为00001000,二进制表示中有1个1。
分析:
如果一个数n不为0,那么n-1的二进制表示,与n的二进制表示相比,n的二进制表示最右边的1变为0,而最右边的1所对应的0全部变为1。其余位不受影响。
例如:n的二进制表示为****1000,则n-1的二进制表示为****0111,则n&(n-1)的二进制表示为****0000。将n二进制表示中最右边的1去掉了。
将n赋值为n&(n-1),继续循环此操作,直到n为0。
代码实现:
package oschina.cc150; /** * @project: oschina * @filename: IT28.java * @version: 0.10 * @author: JM Han * @date: 3:20 PM 1/8/2016 * @comment: calculate the number of 1 in binary format * @result: Your test result */ public class IT28 { public static int getOneNum(int x){ int r = 0; while(x != 0){ x = x&(x-1); r++; } return r; } public static void main(String[] args) { int n = 20; System.out.println("The 1 in number: " + n + " is: " + getOneNum(n)); } }
相关文章推荐
- 华为机试——挑7
- eclipse SWT 中实现工程图标最小化到托盘,并只能右键托盘图标选择关闭
- zookeeper集群搭建
- YUV与RGB格式转换的教训与思考(一)
- 去掉所有的html标签
- 水晶报表 隐藏左边组树
- Parcelable和Serializable
- Java中的存储
- android-Backing up App Data to the Cloud
- 【转】成为Java顶尖程序员 ,看这10本书就够了
- 开发中的文本换行问题
- UITableView总结
- <LeetCode OJ> 83. Remove Duplicates from Sorted List
- iOS开发多线程篇—GCD介绍
- 倍增算法的另一种解法
- foreach的原理
- JAVA-Semaphore信号灯-可实现维护自身线程访问数
- 成为JAVA GC专家系列
- [转] 虚树的概念
- 由浅入深理解索引的实现