第一次尝试
#include<stdio.h>
//在32位系统下:
//要拿出奇数位则需要&01010101010101010101010101010101 也就是十六进制的0x55555555
//要拿出偶数位则需要&10101010101010101010101010101010 也就是十六进制的0xaaaaaaaa
//最终将得到的结果相加也就是 |(或) 起来
#define change(num) (((num) & 0x55555555) << 1 | ((num) & 0xaaaaaaaa) >> 1)
int main() {
int n = 914;
int arr[32] = { 0 };
//将914的二进制排列打印出来
for (int i = 31; i >= 0; i--, n = n >> 1) {
arr[i] = n & 1;
}
for (int i = 0; i < 32; i++) {
printf("%d", arr[i]);
}
printf("\n");
int num = change(914);
//将914进行奇数偶数位互换之后的二进制排列打印出来
for (int i = 31; i >= 0; i--, num = num >> 1) {
arr[i] = num & 1;
}
for (int i = 0; i < 32; i++) {
printf("%d", arr[i]);
}
return 0;
}
本代码比较简单,主要是考察一下宏的一些使用细节,这些使用细节会在我的博客程序的编译中详细说道。