今天拿到的程序题目是:获取一个数二进制序列的偶数位和奇数位,分别输出二进制序列。
下面是第一次写的程序:
#include<stdio.h>
int main()
{
intj=0,i=0,t=0;
int pp[32];
printf("请输入一个任意数:");
scanf("%d",&j);
for(i=0;j!=0;i++)
{
pp[i]=j%2;
j/=2;
t=i+1;
}
for(;t<32; t++)
{
pp[t]=0;
}
printf("转化为二进制数的偶数位为:\n");
for(i=31;i>=0;i-=2)
{
printf("%d",pp[i]);
}
printf("\n");
printf("转化为二进制数的奇数位为:\n");
for(i=30;i>=0;i-=2)
{
printf("%d",pp[i]);
}printf("\n");
system("pause");
return 0;
}
过程看起来比较麻烦,要把十进制先转化为二进制,再求其偶数位和奇数位。经过跟同学的探讨之后,总结到一种很简单的办法。利用((num>>i)&i)来代替把十进制转化成二进制的过程,而且也解决了如果十进制数是负数的问题。具体实施如下:
#include<stdio.h>
int main()
{
inti=0,j=0,num,t=0,k=0;
intaa[16],bb[16];
printf("请输入一个十进制数:");
scanf("%d",&num);
printf("偶数位数是:");
for(i=1;i<=31;i+=2)
{
if((num>>i)&1)
{
aa[t]=1;
}
else
{
aa[t]=0;
}
printf("%d",aa[t]);
t++;
}
printf("奇数位数是:");
for(i=2;i<=32; i+=2)
{
if ((num>>i)&1)
{
bb[k]=1;
}
else
{
bb[k]=0;
}
printf("%d",bb[k]);
k++;
}
system("pause");
return 0;
}