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

来源:互联网 发布:广州淘宝拍照的地方 编辑:程序博客网 时间:2024/06/05 04:34

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

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进制

我们试一下前面举的例子


0 0
原创粉丝点击