#include<stdio.h>
int main()
{
int i = 0;
int num = 0;
int count = 0;
scanf("%d", &num);
while (num)
{
if (num % 2 == 1)
count++;
num = num / 2;
}
printf("%d", count);
return 0;
}
******有局限性,当num是负数时就都是***零
#include<stdio.h>
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;
}
*****计算机储存数据是以补码的形式储存
正数:原码=反码=补码 负数:原码 1001
反码 1110
补码 1111
-1的源码应该是1000 0001,反码是1111 1110,补码是1111 1111。
对于-5,计算过程如下:
- 原码:1000 0101
- 取反得到反码:1111 1010
- 反码加1得到补码:1111 1011