题目
写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
思路
我们假设从右往左数
二进制位的奇数位和偶数位交换就是将所有奇数位向左移动一位,将所有偶数位向右移动一位
得到所有的奇数位后,将其左移1位
得到所有的偶数位后,将其右移1位
将两者相加就得到了奇数位与偶数位交换后的值
实现
#include<stdio.h>
#define SWAP(n) ((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1)
int main()
{
int a;
scanf("%d", &a);
printf("%d\n",SWAP(a));
return 0;
}
以上就是本篇文章的内容了,很感谢你能看到这里
如果觉得内容对你有帮助的话,不妨点个关注
我会继续更新更高质量的内容,我们一同学习,一同进步!