题目链接
解题思路
-
0x555555 = 0101 0101 0101 0101 0101 0101 0101 0101
-
0xaaaaaa = 1010 1010 1010 1010 1010 1010 1010 1010
-
首先分别取出奇数位和偶数位
-
然后奇数位左移,偶数维右移
-
最后把奇数位和偶数位做或运算
AC代码
class Solution {
public int exchangeBits(int num) {
int odd = num & 0x55555555;
int even = num & 0xaaaaaaaa;
odd = odd << 1;
even = even >> 1;
return odd | even;
}
}
本地测试代码
package com.company;
public class Solution_1774 {
public static int exchangeBits(int num) {
int odd = num & 0x55555555;
int even = num & 0xaaaaaaaa;
odd = odd << 1;
even = even >> 1;
return odd | even;
}
public static void main(String[] args) {
System.out.println(exchangeBits(2));
System.out.println(exchangeBits(3));
}
}