文章目录
面试题:求变量n在内存中二进制1的个数
#define _CRT_SECURE_NO_WARNINGS
#define F(X,Y) ((X)+(Y))
#include<stdio.h>
int func(int n)
{
int count = 0;
if (n > 0)
{
while (n != 0)
{
if (n % 2 == 1)
{
count++;
}
n /= 2;
}
}
else
{
int i = 0;
while(i < 32)
{
if (((n >> 1) & 1) == 1)
{
count++;
}
i++;
}
}
return count;
}
int main()
{
int n = -1;
int ret = func(n);
printf("%d",ret);
return 0;
//11111111111111111111111111111111
//00000000000000000000000000000001
/* 与运算后---全1则1 */
//00000000000000000000000000000001
}
-1的二进制序列是11111111111111111111111111111111
所以32位都是1
6的二进制序列是00000000000000000000000000000110
所以32位只有2位是1