思路一:把每一位分别&1,判断是0或1,从最高位开始判断
#include<stdio.h>
#include<windows.h>
int main()
{
int x = 15;//0000 0000 0000 0000 0000 0000 0000 1111
int n = 0;
int i = 0;
int j = 0;
int a1[16] = { 0 };//偶数序列
int a2[16] = { 0 };//奇数序列
for (; n < 32; n += 2)
{
if (x&(1 << (31 - n)))//从最高比特位开始判断
{
a1[i] = 1;
i++;
}
if (x&(1 << (30 - n)))//从第31位比特位开始判断
{
a2[j] = 1;
j++;
}
}
for (i = 15;i >= 0; i--)
{
printf("%d ", a1[i]);
}
printf("\n");
for (j = 15; j >= 0;j--)
{
printf("%d ", a2[j]);
}
system("pause");
return 0;
}
输出结果为:
思路二:从最低位开始判断
int main()
{
int a = 15;
int arr1[16];//偶数序列。
int arr2[16];//一个二进制数占32个字节,则奇偶位分别占16个字节。
int i = 0;
while (i < 32)
{
arr1[i / 2] = a % 2;
a >>= 1;//算数右移,左边补1,右边舍弃。
i++;
arr2[(i - 1) / 2] = a % 2;
a >>= 1;
i++;
}
for (i = 15; i >= 0; i--){
printf("偶序列分别为:%d\n", arr1[i]);
}
for (i = 15; i >= 0; i--)
{
printf("奇序列分别为:%d\n", arr2[i]);
}
system("pause");
return 0;
}
思路三:这个数分别&5和10;可得到偶数序列和奇数序列上的值,然后再分别取出奇欧序列的值
#include<stdio.h>
#include<windows.h>
int main()
{
int x = 15;
int num1 = x & 10;
int num2 = x & 5;
int x1;
int x2;
while (num1)
{
num1 = num1>>1;
x1 = num1 % 2;
num1 = num1 / 2;
printf("%d ", x1);
}
printf("\n");
while (num2)
{
x2 = num2 %2;
num2 = num2>> 2;
printf("%d ", x2);
}
system("pause");
}
这个结果是11 11,省略了高比特位上的0.