【力扣面试】面试题 05.07. 配对交换
题目
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
示例1:
输入:num = 2(或者0b10)
输出 1 (或者 0b01)
示例2:
输入:num = 3
输出:3
解题思路
思路:
0x55555555(十六进制) = 01010101010101010101010101010101(二进制)
0xaaaaaaaa(十六进制) = 10101010101010101010101010101010(二进制)
ans = (提取奇数位<<1)+(提取偶数位>>1)
代码
class Solution {
public int exchangeBits(int num) {
return ((num & 0x55555555) << 1) | ((num & 0xaaaaaaaa) >> 1);
}
}