求一个参数二进制中 1 的个数
原理:
在计算机系统中,数值⼀律⽤补码来表⽰和存储
n=n&(n-1)-——消灭n的二进制中最右边的1(即把1变为0)
int n=13;
补码:
n——0~1101
n-1——0~1100
n&(n-1)——0~1100
代码如下:
#include<stdio.h>
int main()
{
int n = 0;
int count = 0; //记录1的个数
scanf("%d", &n);
while (n)
{
n = n & (n - 1);
count++;
}
printf("%d\n", count);
return 0;
}
判断n是否为2的次方数:
原理:
若n的二进制中只有1个1,则n为2的次方数
#include<stdio.h>
int main()
{
int n = 0;
scanf("%d", &n);
if(n&(n-1)==0)
printf("yes/n");
return 0;
}