例如 十进制数10
二进制序列就是 00000000000000000000000000001010
这个二进制序列有两个1,所以个数就是2
如果是一个负数的话我们要转化为补码来计算 (在这里计算机会自动帮我们转为补码来计算)
例如 十进制数-1
补码=反码+1
-1的原码就是 10000000000000000000000000000001
反码就是 1111111111111111111111111111111111110
补码就是 1111111111111111111111111111111111111
因此-1的二进制序列表示1的个数有32个
第一种方法:位运算
那么我们如何写一段代码来计算一个十进制数的二进制序列有多少个1呢
第一种方法我们可以使用位运算
我们可以使用按位与(&),两个数相与,只有两个数都是1的时候,按位与的结果才是1
所以我们可以写一个循环,让需要进行计算的十进制数的二进制序列的每一位都和整数1进行按位与的运算,为什么要用1呢,因为1的最低位是1,而其他位都是0,。我们然要计算的二进制序列每一位都与1进行按位与,如果是1,我们就++一下,所以我们可以设置一个变量来统计一下。
代码如下:
#include<stdio.h>
int Numberof1(int n)
{
int count = 0;
for (int i = 0; i < 32; i++)//将32位全