获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num, count, i, a[32];
count = 0; i = 0;
scanf("%d", &num);
while (num)
{
a[i] = num % 2;
num = num / 2;
count++;
i++;
}
printf("count=%d\n", count);/*输出位数的总数*/
for (i -= 1; i >= 0; i--)
{
printf("%d", a[i]);
}
printf("\n奇数位为:");
for (i = 0; i<count; i += 2)/*数组从a[0]开始的,故i<count*/
{
printf("%d ", a[i]);
}
printf("\n偶数位为:");
for (i = 1; i <= count; i += 2)
{
printf("%d ", a[i]);
}
system("pause");
return 0;
}
上述方法只适合正数。
对此方法进行改进,通过移位法可以依次输出二进制序列。
代码如下:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num,i,j,m,a[16],b[16];
scanf("%d",&num);
m=sizeof(a)/sizeof(a[0]);
for(i=0,j=0;j<32;i++,j+=2)
{
a[m-1-i]=(num>>j)&1;/*num向右移动j位,数组a被倒序输入,数组a为偶数位*/
}
printf("奇数位为:");
for(i=0;i<m;i++)
{
printf("%d ",a[i]);
}
for(i=0,j=1;j<32;i++,j+=2)
{
b[m-1-i]=(num>>j)&1;/*num向右移动j位,数组b被倒序输入,数组b为奇数位*/
}
printf("\n偶数位为:");
for(i=0;i<m;i++)
{
printf("%d ",b[i]);
}
printf("\n二进制序列为:");
for(i=0;i<m;i++)
{
printf("%d%d",b[i],a[i]);
}
system("pause");
return 0;
}
转载于:https://blog.51cto.com/luoyafei/1701379