奇偶位交换

来源:互联网 发布:00截断原理 php 编辑:程序博客网 时间:2024/06/06 17:30

请编写程序交换一个数的二进制的奇数位和偶数位。(使用越少的指令越好)
给定一个int x,请返回交换后的数int。
测试样例:
10
返回:5

解题思路
让目标数&055555555,则保留目标数的偶数位,然后再左移(不能右移,因为最低位为0位,右移,最低位的数会被抹去补零,左移第30位到第31位没有信息丢失),同理目标数&0AAAAAAAA,奇数位保留,然后右移移位。之后把前两步的结果相于。

         int odd = x & 0xAAAAAAAA;         int even = x & 0x55555555;        return (odd << 1)+(even >>>1);
0 0
原创粉丝点击