题目:
如题,交换一个整数二进制表示中,奇数位相邻的偶数位交换。如n=10101010, 则交换后的值m = 01010101.
解析:
假设n=abcdefgh,则可以首先通过获取两个值m1和m2,其中m1 = a0c0e0g0, m2 = 0b0d0f0h,最后所求的值即为m = m1 | m2。要获取m1其实很简单,m1 = n & 0xaaaa;同理,获取m2 = n & 0x5555。
代码:
/*
*交换整数n的奇数位和偶数位的二进制位值
*此处假设int为32位
*/
int swapOddEvenBits(int n)
{
return (n & 0xaaaaaaaa) | (n & 0x55555555);
}