1. 题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
2. 思路和方法
使用移位(<<)和 “| & !”操作来实现。1的二进制是:前面都是0,最后一位为1。每次向左移位一下,使得flag的二进制表示中始终只有一个位为1,每次与n做位与操作,这样就相当于逐个检测n的每一位是否是1。unsigned int flag = 1; 例如:5&1 = 101 & 001,1前面补0。
3. C++核心代码
3.1 位运算
1 class Solution { 2 public: 3 int NumberOf1(int n) { 4 int result = 0; 5 unsigned int flag = 1; 6 while(flag) 7 { 8 if(n&flag) 9 result++; 10 flag = flag<<1; 11 } 12 return result; 13 } 14 };
参考资料
https://blog.csdn.net/qq_28632639/article/details/87966115