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