题目描述:

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

分析:

加入一个数的二进制位是XXX...XXX1000...000,那么这个数减去1,就会变成XXX...XXX0111...111,将这两个数相与(即&),

那么就可以得到XXX...XXX0000...000,将原来的数的最后一个1变成0。

然后我们就可以继续用相同的方法探究更高位XXX...XXX中的1的个数了,每循环一次就将最后一个1变成0。

所以循环一共执行了该数中1的个数那么多次数。如果1的个数少的话,那么该算法将特别的快,不必遍历每一个bit位。

代码:

 class Solution {
public:
int NumberOf1(int n) {
int cnt = ;
int m = n;
while(m) {
m = m & (m - );
cnt++;
}
return cnt;
}
};

最新文章

  1. Java操作excel
  2. CSS外边距margin上下元素重叠
  3. Android开发环境搭建:离线安装ADT插件和安装SDK
  4. MATLAB信号与系统分析(二)——离散时间信号与系统的时域分析
  5. Spinner学习
  6. 问题-XE8报Object factory for class{xx-xx-xx-xx-xx} is missing. To register it, you can drop component[TFDGUIxWaitCursor] into your project.
  7. UVa 12171 (离散化 floodfill) Sculpture
  8. JavaScript经典面试题系列
  9. (原+转)C++中的lambda表达式
  10. gnu 扩展之#和##
  11. [高中作文赏析]妈妈, 我心中的"灯"
  12. 安装cx_Oracle 6
  13. spring-session-data-redis解决session共享的问题
  14. 直接突破百度网盘,用IDM或者迅雷下载。
  15. GankApp 侧滑和title修改颜色的完整项目app
  16. Catlike学习笔记(1.3)-使用Unity画更复杂的3D函数图像
  17. oracle 查某一列有重复值的记录
  18. Golang之接口(interface)
  19. January 01 2017 Week 1st Sunday
  20. 成都Uber优步司机奖励政策(2月7日)

热门文章

  1. Python入门教程 超详细1小时学会Python
  2. Odoo 8.0 new API 之one装饰
  3. STM32F1_常见外设资源汇总
  4. ipmitool sdr type Temperature sdr 从传感器获取某一类数据
  5. 打开palette控制面板
  6. 使用Javascript实现随机字符串
  7. Unity UGUI实现Button按钮长按状态的判断
  8. 【BZOJ】1691: [Usaco2007 Dec]挑剔的美食家(set+贪心)
  9. 清除信号量队列导致zabbix自动关闭
  10. commit命令