剑指offer题解C++【11】二进制中1的个数
2017-07-27 14:46
309 查看
题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。解题思路
一个不为0的整数n,如果减1,那么(其二进制表示)原来处于最右边的1将会变为0,这个1后面的0(如果有的话)都会变为1,其余位数保持不变;让n和n-1进行按位与,即n&(n-1),则会让n最右边的1变为0;
(比如n=1001 1000, n-1=1001 0111, n&(n-1)=1001 0000;)
那么n的二进制中有多少个1,就可以进行多少次这样的操作。
在计算机中,负数本身就是用补码表示的,因此不用考虑这个条件。
代码
class Solution { public: int NumberOf1(int n) { int count=0; while(n){ n=n&(n-1); count++; } return count; } };
相关文章推荐
- (C++)剑指offer-11:二进制中1的个数(位运算)
- 剑指offer题解C++【25】复杂链表的复制
- C++剑指offer_面试题11_数值的整数次方(*)
- 剑指offer题解C++【9】变态跳台阶
- 剑指offer 面试题10:二进制中1的个数 题解
- 剑指offer题解C++【10】矩形覆盖
- 剑指offer题解C++【1】
- 剑指offer第十一题【二进制中1的个数】c++实现
- 剑指offer--(11)二进制中1的个数
- 剑指offer题解C++【2】
- 剑指offer题解C++【7】斐波那契数列
- 剑指offer题解C++【22】从上往下打印二叉树
- 剑指offer(C++)——二进制中1的个数
- 剑指Offer——(11)二进制中1的个数
- 剑指offer题解 二进制中1的个数
- 剑指offer题解C++【3】
- 剑指offer题解C++【6】旋转数组的最小数字
- 剑指offer题解C++【8】跳台阶
- 剑指offer题解C++【13】调整数组顺序使奇数位于偶数前面
- 九度剑指Offer面试题10:二进制中1的个数(Java题解)