求一个整数在内存中二进制中1的个数、我们知道二进制是以2的平方的方式递增的,我们拿11%2,余数1,算出的是二进制中最后一位的数字1,(这里找到了一个1),然后拿11/2再%2,(11/2)/2再%2,直到11除尽为0,如果余数为1,我们就可以找到一个1的个数,把找到的1的次数相加,就是二进制中1的总数,写成代码如下
#include<stdio.h>
int main()
{
int a = 11;
int count = 0;//用于计算1出现的次数
while (a)
{
if (a % 2 == 1)
{
count++;
}
a = a / 2;
}
printf("二进制中1的个数=%d\n", count);
return 0;
}
我们可以发现,这个程序只能计算正数,负数无法计算。那怎样才能计算负数的呢?
假设我们要求-11转换成二进制1的数量,我们知道-11转换成二进制的形式为
11111111 11111111 11110101,我们拿-11按位