这题涉及到位运算,要交换奇数偶数位,可以先把奇数偶数位提取出来
提取奇数位: 按位与上 0101 0101 0101 0101 0101 0101 0101 0101(二进制)------0x55555555(十六进制)
提取偶数位: 按位与上 1010 1010 1010 1010 1010 1010 1010 1010(二进制)------0xaaaaaaaa(十六进制)
然后奇数位左移一位,这时候奇数位就变成了偶数位,偶数位右移1位变成奇数位,再将他们按位或就交换完毕
int exchangeBits(int num)
{
// int odd = num & 0x55555555;
// int even = num & 0xaaaaaaaa;
// return (odd << 1) | (even >> 1);
return ((num & 0x55555555) << 1) | ((num & 0xaaaaaaaa) >> 1);
}