例:
思路:
分别求出二进制奇数位、偶数位全为 0 的数,再将奇数位全为 0 的数右移 1 位,偶数位为 0 的数左移 1 位,最后将两个相加可得到结果。
求奇数位全为 0 的数:
将 4 个二进制位视为 1 组,按位与「1010」即可将奇数位全置位 0,「1010」对应十六进制 a
求偶数位全为 0 的数:
按位与「0101」,对应十六进制 5
实现:
#define SWAP(n) (((n & 0xaaaaaaaa) >> 1) + ((n & 0x55555555) << 1))