如何用一个宏将一个数字的奇数位和偶数位交换呢?

eg:    比如9,它的十进制应该是 1001  改变后应该是 0110,也就是6。

        首先,我们应该思考怎么得到一个数字(32个比特位)的奇数位和偶数位。

       我们分析一下(&)的某些特性:

        0&1=0    1&1=1   

      可知任何数&1都为它本身。

      因此我们可以让奇数位都&1,偶数位都&0,得到所有的奇数位。

      即 num&0101 0101 0101 0101 0101 0101 0101 0101

      同理让偶数位&1,奇数位&0,得到所有的偶数位

      即num&1010 1010 1010 1010 1010 1010 1010 1010

      再考虑如何交换得到的奇数位和偶数位

      这里我们可以直接用按位操作符(<<)(>>)就可以了。

num&0101 0101 0101 0101 0101 0101 0101 0101)>>1

num&1010 1010 1010 1010 1010 1010 1010 1010 )<<1

代码如下:

注:这里0x表示的是16进制

如何用一个宏将一个数字的奇数位和偶数位交换_16进制

我们试一下前面举的例子

如何用一个宏将一个数字的奇数位和偶数位交换_16进制_02