如何用一个宏将一个数字的奇数位和偶数位交换呢?
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进制
我们试一下前面举的例子
标签:奇数,宏将,0101,偶数,num,1010 From: https://blog.51cto.com/u_15861560/5822278