题目
配对交换。编写程序,交换某个整数的奇数位和偶数位,尽量使用较少的指令(也就是说,位0与位1交换,位2与位3交换,以此类推)。
示例1:
输入:num = 2(或者0b10)
输出 1 (或者 0b01)
分析: 构建两个掩码,分别取出奇数位和偶数位,奇数位右移,偶数位左移,然后取或
class Solution:
def exchangeBits(self, num: int) -> int:
"""
1. 取出奇数位,偶数位置0
2. 取出偶数位,奇数位置0
3. 奇数位右移1位,偶数位左移一位
4. 两个二进制取或
"""
odd_mask = int('10'*16, 2)
even_mask = int('01'*16, 2)
odd = num & odd_mask
even = num & even_mask
return odd >> 1 | even << 1