> 文章列表 > 实现宏:可以将一个整数的二进制位的奇数位和偶数位交换(详解)

实现宏:可以将一个整数的二进制位的奇数位和偶数位交换(详解)

实现宏:可以将一个整数的二进制位的奇数位和偶数位交换(详解)

前言:内容包括:宏的实现,实现思路,理解图示

以5为例:

5的二进制位是:         00000000000000000000000000000101

奇偶二进制位交换后:00000000000000000000000000001010

5变成了10

宏的实现:

#include<stdio.h>#define SWAP_BIT(x) (x = (((x & 0x55555555)<<1)+ ((x & 0xaaaaaaaa)>>1)))
int main()
{int n = 0;scanf("%d", &n);SWAP_BIT(n);printf("%d", n);return 0;
}

实现思路:

1 得到一个数的所有奇数位,偶数

   得到所有奇数位:此数 & 0x55555555

   得到所有偶数位:此数 & 0xaaaaaaaa

2 将得到的奇数位向左移动一位

   将得到的偶数位向右移动一位

3  现在的奇数位+现在的偶数位 = 一个数奇偶二进制交换后的结果

    一个数的奇数位+偶数位 = 一个数:

5的二进制:(只取最后的4个比特位)0101

理解图示: