求一个整数存储在内存中二进制1的个数,我们首先想到的是我们日常中把10进制整数换成2进制的算法,比如求3的二进制,就是把3先%2然后在算除以2。
int main()
{
int num = 0;
int count = 0;
scanf("%d", &num);
while (num)
{
if (num % 2 == 1)
{
count++;
}
num = num / 2;
}
printf("%d", count);
return 0;
}
但是这个算法有一个问题就是如果我们想计算-1中内存存储1的个数,这个代码就会得不到我们预期的结果,我们想会一会有一个更好的思路呢?
按位与& 两位上都为1则为1,那么我们就思考怎样才能让和1比较呢
移位操作符,这样我们的问题就解决了。
int main()
{
int i = 0;
int num = 0;
int count = 0;
scanf("%d", &num);
for (i = 0; i < 32; i++)
{
if (1 == ((num >> i) & 1))
count++;
}
printf("%d", count);
return 0;
}