以11为例子,//11:0000 0000 0000 0000 0000 0000 0000 1011
奇数位序列:0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1
偶数位序列:0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1
代码如下:
void Print_num(unsigned int num){
int i = 0;
int j = 0;
int arr1[16];
int arr2[16];
for (i = 0; i < 32; i += 2){
arr1[j] = ((num >> i) & 1);//奇数位
++j;
}
j = 0;
for (i = 1; i < 32; i += 2){
arr2[j] = ((num >> i)&1);//偶数位
++j;
}
printf("奇数序列 ");
for (i = 15; i >= 0; i--){
printf("%d ", arr1[i]);
}
printf("\n");
printf("偶数序列 ");
for (i = 15; i >= 0; i--){
printf("%d ", arr2[i]);
}
}
这种方法利用两个数组存储了奇数序列,偶数序列,占用了空间
也可以用如下方法进行输出
比如说看奇数位,那每次向右移动31位,再与1得到第一位情况,
下一次移动29位与1得到第三位,以此类推,所以奇数列可得,类似的偶数列只是开始移动30位
void Print_num2(unsigned int n){
int i = 0;
printf("奇数序列 ");
for (i = 31; i >= 0; i-=2){
printf("%d ", ((n >> i) & 1));
}
printf("\n");
printf("偶数序列 ");
for (i = 30; i >= 0; i-=2){
printf("%d ", ((n >> i) & 1));
}
printf("\n");
}