题目难度:简单
题目描述:
输入一个整数 n ,输出该数32位二进制表示中1的个数。其中负数用补码表示。- 数据范围:
即范围为: −2147483648 <= n <= 2147483647 示例1:
输入:10
返回值:2
说明:
十进制中10的32位二进制表示为0000 0000 0000 0000 0000 0000 0000 1010,其中有两个1
思路1:巧用与(&)运算
class Solution { public: int lowbit(int n) { return n & -n; } int NumberOf1(int n) { if(n == 0) return 0; int res = 0; while (n) { n -= lowbit(n); res++; } } };
思路2:循环按位比较法
class Solution { int NumberOf1(int n) { int res = 0; for (int i= 0; i < 32; ++i) { if ((n & 1 >> i) != 0) res++; } return res; } }
😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘😘