#include <stdio.h>
int main()
{
int a = 13;
//00000000000000000000000000001101
//00000000000000000000000000000001
int count = 0;
int i = 0;
for (i=0;i<32;i++)
{
if ((a & 1) == 1)
count++;
a>>= 1;
}
printf("%d", count);
return 0;
}
另外1:如果将13的二进制位中的从右向左第5位变为1
#include <stdio.h>
int main()
{
int a = 13;
//00000000000000000000000000001101
//00000000000000000000000000010000
//00000000000000000000000000011101
int b = a | (1 << 4);
printf("%d", b);
return 0;
}
另外2:将29的二进制位中的从右向左第5位变回1
int main()
{
int a = 29;
//00000000000000000000000000011101
//11111111111111111111111111101111
//00000000000000000000000000001101
int b = a & ~(1 << 4);
printf("%d", b);
return 0;
}
求一个数的二进制位有多少个1的另外的解法
//15 - 00001111
//15/2 - 7 - 0111
//7/2 - 3 - 0011
//3/2 - 1 - 0001
//1/2 - 0 - 0000
int Numberof1(unsigned int n)
{
int count = 0;
while (n)
{
if (n%2 == 1)
{
count++;
}
n /= 2;
}
return count;
}
int main()
{
int n = 15;
int ret = Numberof1(n);
printf("%d", ret);
return 0;
}
int Numberof1( int n)
{
int count = 0;
int i = 0;
for (i = 0; i < 32; i++)
{
if (((n >> i) & 1) == 1)
{
count++;
}
}
return count;
}
int main()
{
int n = 15;
int ret = Numberof1(n);
printf("%d", ret);
return 0;
}
//n=n&(n-1)
//n=15
//1111 - n
//1110 - n-1
//1110 - n
//1101 - n-1
//1100 - n
//1011 - n-1
//1000 - n
//0111 - n-1
//0000 - n
int Numberof1(int n)
{
int count = 0;
while (n)
{
n = n & (n - 1);
count++;
}
return count;
}
int main()
{
int n = 15;
int ret = Numberof1(n);
printf("%d", ret);
return 0;
}
补充:写一个代码判断一个数是不是2的n次方
//写一个代码判断一个数是不是2的n次方
//2的n次方的数字,其二进制只有一个1
int main()
{
int n = 0;
scanf("%d", &n);
if ((n & (n - 1)) == 0)
{
printf("是2的n次方");
}
else
{
printf("不是2的n次方");
}
return 0;
}