请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
给定一个int x,请返回交换后的数int。
测试样例:
10
返回:5
解题思路
让目标数&055555555,则保留目标数的偶数位,然后再左移(不能右移,因为最低位为0位,右移,最低位的数会被抹去补零,左移第30位到第31位没有信息丢失),同理目标数&0AAAAAAAA,奇数位保留,然后右移移位。之后把前两步的结果相于。
int odd = x & 0xAAAAAAAA;
int even = x & 0x55555555;
return (odd << 1)+(even >>>1);