给一个int型整数,如何将这个整数的奇偶位互换
题目: 假设一个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
这就是最终结果