目录
1、二进制中0的个数
使用|运算:有一个是1则为1,x|(x+1)可以将数字二进制位的最低位的0改为1,逐渐递进,直到将二进制位改为全1,对应原码-1结束。
#include<stdio.h>
int main()
{
char x =5, count = 0;
while (x+1)//当x=-1的时候退出循环
{
count++;
x =x|(x + 1);
}
printf("%d", count);
return 0;
}
2、二进制中1的个数
&运算:同时为1才为1,x&(x-1)可以将x最低位的1改为0
#include<stdio.h>
int main()
{
int x = 5, count = 0;
while (x)
{
x &= (x - 1);
count++;
}
printf("%d", count);
return 0;
}
3、一个数是不是2的几次幂
#include<stdio.h>
int main()
{
//一个数是2的次幂 2^0=1 0001,2^3=8 1000
//所以说二进制数只有一个1
int x = 1;
if(x<=0)
printf("NO");
else {
x = x & (x - 1);
if (x == 0)
printf("YES");
else
printf("NO");
}
return 0;
}
#include<stdio.h>
#include<math.h>
int main()
{
int n = 32;
for (int i = 0; (int)pow(2, i) <= n ; i++)
{
if ((int)pow(2, i) == n)
{
printf("yes,%d次幂",i);
return 0;
}
}
printf("no");
return 0;
}