目录
方法一:
知识点:&(按位与)以及 <<(左移),>> (右移) 操作符的使用
知识点回顾:
&(按位与):全一则一 |(按位或):有一则一
^(按位异或):相同为0,相异为1 ~(按位取反):1变0,0变1
<<(左移操作符):左边舍弃,右边补0
>>(右移操作符):右边舍弃,左边补符号位
思路:1.构建数组并取出二进制位
2.相邻奇偶位交换
取出二进制位:
以此类推,取出二进制位就是((x(目标数)>>1) &1)
相邻奇偶位交换
总代码;
#include <stdio.h>
int main()
{
int a = 0;
scanf("%d", &a);
int arr[32] = { 0 };
int i = 0;
for (i = 31; i >= 0; i--)
{
if ((a & 1) == 1)
{
arr[i] = 1;
}
else
{
arr[i] = 0;
}
a =a >> 1;
}
printf("二进制位序列:\n");
for (i = 0; i < 32; i++)
{
printf("%d ", arr[i]);
}
printf("\n");
for (i = 0; i < 32; i+=2)
{
int temp = arr[i];
arr[i] = arr[i+1];
arr[i + 1] = temp;
}
for (i = 0; i < 32; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
方法二:
思路:
代码:
#include <stdio.h>
#define swap(x) ((x & 0xAAAAAAAA) >> 1) | ((x & 0x55555555) << 1)
int main()
{
int a;
scanf("%d", &a);
int i = 0;
for (i = 31; i >=0 ; i--)
{
printf("%d ", (a >> i) & 1);
}
printf("\n");
printf("交换后结果\n");
a = swap(a);
for (i = 31; i >= 0; i--)
{
printf("%d ", (a >> i) & 1);
}
return 0;
}