给一个int型整数,如何将这个整数的奇偶位互换

时间:2021-12-27 04:41:13

题目: 假设一个8为整数是(10101100)b那么奇偶互换之后就是(01011100)b。假设机器是32位的

注意: 8位中最低位开始数,最低位是第0位,是偶数为,次低位时第1位,是偶数位。

做法: ((a>>1)&0x5555555) | ((a<<1)&0xaaaaaaaa)

解释

a>>1,所有的bit都右移一位,相当于奇数位的bit到了偶数位,然后和0x5555555做与操作,相当于只留下了偶数位,也就是原来的奇数位。

例如 11111010 >>1  => 01111101  & 0x55 => 01010101

a<<1,所有的bit都左移一位,相当于偶数位的bit到了寄数位,然后和0xaaaaaaaa做与操作,相当于只留下了奇数位,也就是原来的偶数位。

例如 11111010 <<1  => 11110100  & 0xaa => 10100000

最后将上面的结果做与操作,就是把移位好的奇偶两部分合在一起。

01010101 | 10100000 =》 11110101

这就是最终结果