宏,將一個數字的奇數位和偶數位交換

用宏定義的方式,將一個數的二進制形式數的奇偶位進行交換。
其實非常簡單,步驟如下:
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);
}

運行結果:

這裏寫圖片描述

發佈了41 篇原創文章 · 獲贊 37 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章