配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
思路就是分别取出奇数位和偶数位,移动后做或运算。
题目规定num是int范围的数
0x55555555 = 0b0101_0101_0101_0101_0101_0101_0101_0101
0xaaaaaaaa = 0b1010_1010_1010_1010_1010_1010_1010_1010
用这两个数做与运算,就可以把奇数位和偶数位取出来,然后位左移奇数位,右移偶数位,再把奇数位和偶数位做或运算。
class Solution{
public int exchangeBits(int num){
//奇数
int odd = num & 0x55555555;
int even = num & 0xaaaaaaaa;
odd = odd << 1;
//>>>无符号右移,高位补0
even = even >>> 1;
return odd | even;
}
}