题目描述
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
两种方法:
长除法:
class Solution {
public:
int NumberOf1(int n) {
int a[32] = { 0 };
int num1 = 0;
int num2 = 0;
int m = abs(n);
for (int i = 31; m != 0; i--)
{
a[i] = m % 2;
num1 += a[i];
m = m / 2;
}
if (n < 0)
{
num1 = NumberOf1(2147483648 + n)+1;
}
return num1;
}
};
理解数据在计算机中存储的方式:位运算
class Solution {
public:
int NumberOf1(int n) {
int count=0;
for(int i=0;i<32;i++){
if(n>>i&1)
count++;
}
return count;
}
};
学习位运算符号,并理解
int n= 19;
int a = n >> 1;
int b =n << 1;
输出结果:
a = 9; // a 是 n 向右移一位;可代替 n/2
b = 38; // b 是 n 向左移一位; 可代替 n*2
a 是 n 向右移一位;可代替 n/2;
b 是 n 向左移一位; 可代替 n*2。