写一个宏实现一个数的奇数位和偶数位交换

来源:互联网 发布:上海 微软云计算架构师 编辑:程序博客网 时间:2024/06/01 08:53
假设我们需要交换的数字为x
将(x&(0x55555555))<<1; x按位与0x55555555后得到的二进制奇数位与x相同但偶数位均为0,然后再向左移一位,偶数位变为原来的奇数位,且移动后奇数位全为0;
将(x&(0xAAAAAAAA))>>1; x按位与0xAAAAAAAA后得到的二进制偶数位与x相同但奇数位均为0,然后再向右移一位,奇数位变为原来的偶数位,且移动后偶数位全为0;

通过将两个二进制按位或((x&(0x55555555))<<1|(x&(0xAAAAAAAA))>>1)就可以得到最终的数字。


#define _CRT_SECURE_NO_WARNINGS#include<stdio.h>#include<stdlib.h>#define SWAP(x)\(((x&(0x55555555)) << 1) | ((x&(0xAAAAAAAA)) >> 1))int main(){int n = 0;printf("输入一个整数:");scanf("%d",&n);SWAP(n);printf("交换后为:%d\n", SWAP(n ));system("pause");return 0;}



阅读全文
0 0
原创粉丝点击