class Solution {
public:
int exchangeBits(int num) {
bitset<32>n(num);
for(int i=0;i<29;i+=2){//偶数位和奇数位交换
int t = n[i];
n[i] = n[i+1];
n[i+1] = t;
}
return n.to_ulong(); //转换成整数
}
};
题解2:
int -> 32位
奇数位全1 -> 0101… 表示为 0x55555555
偶数位全1 -> 1010… 表示为 0xaaaaaaaa
ans = (提取奇数位 << 1) + (提取偶数位 >> 1)
class Solution {
public:
int exchangeBits(int num) {
return ((num&0x55555555) <<1)+((num&0xaaaaaaaa) >>1);
}
};