1.获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
#include<stdio.h>
int main()
{
inti,j,n,m;
chara[32]={0};
printf("peleaseinput the number:");
scanf("%d",&n);
for(m=0;m<32;m++)
{
i=(unsignedint)n%2;
j=(unsignedint)n/2;
n=j;
a[m]=i;
}
printf("此数的二进制序列为:\n");
for(m=31;m>=0;m--)
{
printf("%d",a[m]);
}
printf("\n二进制奇数位序列为:\n");
for(m=31;m>=0;m=m-2)
{
printf("%d",a[m]);
}
printf("\n二进制偶数位序列为:\n");
for(m=30;m>=0;m=m-2)
{
printf("%d",a[m]);
}
printf("\n");
rwturn0;
}
2.写一个函数返回参数二进制中一的个数
#include<stdio.h>
int count_one_bits(unsigned int value)
{
unsignedint bitnum=0;
while(value>0)
{
value&=(value-1);
bitnum++;
}
returnbitnum;
}
int main()
{
ints,value;
intcount_one_bits(unsigned int value);
scanf("%d",&value);
s=count_one_bits(value);
printf("%d\n",s);
}
注: 公式value&=(value-1)在value>0的情况下没每&一次就会将二进制位中的一个1变为0,value变为0,相&的次数即为二进制中一的个数。
3.求两个无符号数二进制位中有多少位不同。
思路:上题用m&=(m-1)求了二进制位中1的个数,而两个数进行异或运算时,相异为1,所以两数异或结果中1的个数即为两数二进制位中不相同位的个数。
#include<stdio.h>
#include<stdlib.h>
int count_one_bits(unsigned int value)
{
unsigned int bitnum = 0;
while (value>0)
{
value &= (value - 1);
bitnum++;
}
return bitnum;
}
int count_differbit( unsigned int m, unsigned int n)
{
unsigned int ret;
unsigned int a;
a = m ^ n;
ret = count_one_bits(a);
return ret;
}
int main()
{
int c, d;
int result;
printf("请输入两个整数:\n");
scanf_s("%d%d", &c, &d);
result=count_differbit(c, d);
printf("两数的二进制表达中有%d位不同!",result);
system("pause");
return 0;
}