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;

}