写一个宏将一个数字的奇数位和偶数位交换。

思路

首先,我们想到的是交换二进制数的奇数位和偶数位。
eg: 11的二进制为 ........0000 1011
交换后应该是:......0000 0111
那我们可以通过位操作把奇数位往左移一位,偶数位往右移一位即可做到。
那怎么移位呢?请看下图:

这里写图片描述

代码实现



    #include <stdio.h>
    #define swap(num) ((num & 0x55555555) << 1) | ((num & 0xAAAAAAAA) >> 1) 
    //奇数位左移,偶数位右移
    int main()
    {
        int num = 0;
        printf("请输入一个数:\n");
        scanf("%d",&num);
        printf("交换后为:%d\n",swap(num));
        return 0;
    }

效果截图

这里写图片描述
11的二进制为0000 1011
7的二进制为0000 0111,实现。

猜你喜欢

转载自blog.csdn.net/lzhcr123/article/details/79940022