代码如下:
#include <stdio.h>
#define SWAP(num) (((num & 0xAAAAAAAA) >> 1) | ((num & 0x55555555) << 1))int main() {int num = 1010;printf("%d\n", num);printf("%d\n", SWAP(num));return 0;
}
思路如下:取出所有的奇数位,左移(最高位会被顶替,最低为会补0),取出所有偶数位,右移(最低位会被顶替,最高为会补0)
如图:
将二者 | 操作,因为每一步都将不需要的位置为了0,所以用 | 操作