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

用宏定义的方式,将一个数的二进制形式数的奇偶位进行交换。
其实非常简单,步骤如下:
1.先将这个数左移一位,然后与0xAAAAAAAA相与,此时就保存了奇数位。
2.再将这个数右移一位,然后与0x55555555相与,此时就保存了偶数位。
3.最后将1,2两步的结果或一下,就得到了最终的结果。
代码是这样的:


//author:fl_sw
//date:
//function:

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
//宏一个二进制数奇偶位的交换
#define SWAP_JO(A) ((((A)>>1)&0x55555555)|(((A)<<1)&0xAAAAAAAA))
int main()
{
    int num = 0;
    int res = 0;
    printf("请输入一个数:\n");
    scanf("%d",&num);

    res=SWAP_JO(num); //使用宏

    void show_bin(); 
    show_bin(num, res);

    return 0;
}
//验证(分别打印 输入的数 和 已经完成奇偶交换后的数 的 十进制形式 和 二进制形式)
void show_bin(num,res)
{
    char a[33];
    char b[33];

    itoa(num, a, 2); //函数itoa打印二进制字符串
    itoa(res, b, 2);

    printf("奇偶位交换前的数是 %d 。它的二进制数为 %s\n",num,a);
    printf("奇偶位交换后的数是 %d 。它的二进制数为 %s\n",res,b);
}

运行结果:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_36391130/article/details/78320301