假如一个整数二进制位为
10011101011011011011001110101111
题解
我们把偶数位和奇数位都单独拿出来
偶数位拿出来向左移动一位
奇数位拿出来向右移动一位
最后两个数相加就是结果
代码
#define Chang_Odd_Even(x) (((x&0x55555555)<<1)+((x&0xaaaaaaaa)>>1))
int main()
{
//10011101011011011011001110101111
//对应16进制0x9D6DB3AF
int i = 0x9D6DB3AF;
printf("%d\n", Chang_Odd_Even(i));
return 0;
}
运行结果