代码如下:
#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; }