C语言--宏将一个数字的奇数位和偶数位交换

来源:互联网 发布:linux nbtscan 编辑:程序博客网 时间:2024/06/04 11:36

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

#define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>#include <windows.h>#define  exchange_even_uneven(x)\(((x&(0xAAAAAAAAA)) >> 1) + ((x&(0x555555555)) << 1))//前半部分代表奇数为清零,再右移一位,则把偶数位换到奇数位,后面反之//0xAAAAAAAAA表示二进制序列:1010 1010 1010 1010 1010 1010 1010 1010// 0x555555555表示二进制序列:0101 0101 0101 0101 0101 0101 0101 0101int main(){int num = 0;int i = 0;int exchange_num = 0;printf("请输入一个数:");scanf("%d", &num);printf("这个数的二进制序列为:\n");for (i = 31; i >= 0; i--){printf("%d", (num >> i) & 1);}exchange_num = exchange_even_uneven(num);printf("\n奇偶交换之后的二进制序列为:\n");for (i = 31; i >= 0; i--){printf("%d", (exchange_num >> i) & 1);}printf("\n");system("pause");return 0;}


0 0