前言
本篇知识补充部分为基础知识,会者可直接跳过。
一、方法简介
此处提供方法以32位为例:
在计算机中整数的存储是以32位二进制数来表示的,比如1的二进制序列:00000000000000000000000000000001
2的二进制序列为00000000000000000000000000000010
3为00000000000000000000000000000011
那么我们首先可以把该数与1按位与,这样我们就可以判断该数的二进制位最低位是否为一,而后我们可以将该数进行算数右移,之后再与1按位与,可判断该数二进制数的第二位是否为一,以此类推,完成对32位二进制数的判断。
二、知识补充
1.按位与&
按位与即将两数的二进制序列对应位相比,全为1则为1,其余情况为0。
案列代码如下:
int main()
{
int a = 5;// 00000000000000000000000000000101
int b = 9;// 00000000000000000000000000001001
int c = a & b;//00000000000000000000000000000001——c=1
printf("%d", c);
return 0;
}
结果将输出c=1。
2.算术右移>>
算术右移即将该数的二进制序列向右移动一位,左边补0。
案例代码如下:
int main()
{
int a = 3;//00000000000000000000000000000011
a = a >> 1;//将a算术右移一位,得到00000000000000000000000000000001
printf("%d", a);//a = 1
return 0;
}
输出将为1。
三、代码
int main()
{
int a = 3;//00000000000000000000000000000011
int count = 0;//计数用
while (a)//当a的二进制序列全为0时停止
{
if ((a & 1) == 1)
{
count++;
}
a = a >> 1;
}
printf("%d", count);//输出将为2
return 0;
}