将一个数字的奇数位与偶数位交换,例如13的二进制是1101,奇数位与偶数位交换后就是1110(14),用代码怎么实现呢,就需要运用&和移位符,
一个数的二进制与0XAAAAAAAA,A=1010。13&(0XAAAAAAAA)的结果就是偶数位,5(十六进制)=0101同样,13&(0X55555555)的结果就是奇数位,
然后偶数位向右移位一位,奇数位向左移位一位,结果相加就是交换后的值。
#include<stdio.h>
#define SWAP(ARG) ((ARG&(0XAAAAAAAA))>>1)+((ARG&(0X55555555))<<1)
int main()
{
int ARG = 0;
printf("请输入要交换的数:\n");
scanf("%d", &ARG);
printf("%d\n", SWAP(ARG));
return 0;
}