今天来说说另外一个位运算的运用:输出二进制序列中所有偶数位和奇数位。
如果对上一篇博客内容深刻了解了的话,这一个题目应该不会有太大的难度,所以闲话少说,直接上程序:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num = 0;
int i = 0;
printf("请输入一个整数:");
scanf("%d",&num);
printf("这个数的二进制序列中奇数位为:\n");
for(i=0;i<32;i+=2)
{
printf("%d ",(num>>i)&1);
}
printf("\n");
printf("这个数的二进制序列中偶数位为:\n");
for(i=1;i<32;i+=2)
{
printf("%d ",(num>>i)&1);
}
printf("\n");
system("pause");
return 0;
}
拿13的二进制序列为例子,13的二进制序列为0000 0000 0000 0000 0000 0000 0000 1101,因此输出应该为1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0和0 1 0 0 0 0 00 0 0 0 0 0 0 0 0,我们来运行一下程序验证一下:
程序是输出了理想的结果,不过却不够完美……因为这是倒序输出,如果想正序输出,则要对两个循环做一下修改:
#include<stdio.h>
#include<stdlib.h>
int main()
{
int num = 0;
int i = 0;
printf("请输入一个整数:");
scanf("%d",&num);
printf("这个数的二进制序列中奇数位为:\n");
for(i=1;i<32;i+=2)
{
printf("%d ",(num>>(31-i))&1);
}
printf("\n");
printf("这个数的二进制序列中偶数位为:\n");
for(i=0;i<32;i+=2)
{
printf("%d ",(num>>(31-i))&1);
}
printf("\n");
system("pause");
return 0;
}
(绿色部分为修改的)
现在我们来看看输出结果:
若大家有疑惑或者更好的想法,欢迎在下方留言交流喔!