写一个宏可以将一个数字的奇数位和偶数位交换
程序员文章站
2024-03-22 10:06:58
...
步骤:取出二进制数的奇数位和偶数位;奇数位右移,偶数位左移。
1&1=1,0&1=1,如果想清除奇数位,那么与一个奇数位为0,偶数位为1的数,即:
01010101010101010101010101010101,也可以写为八进制为0xaaaaaaaa。清除偶数位也是同样的方法。
#include<stdio.h>
#define SWAPBIT(m) ((m&0xaaaaaaaa)>>1)+((m&0x55555555)<<1)//得到奇数位右移,偶数位左移
int main()
{
int n = 10;
int ret = SWAPBIT(n);
printf("%d\n", ret);
return 0;
}