使用宏将数字的二进制奇数位偶数位交换

来源:互联网 发布:杭州淘宝客服招聘 编辑:程序博客网 时间:2024/06/07 12:21

问题:将奇数位和偶数位交换。

思路:将其第0位和第1位交换,第2位和第3位交换,以此类推。

我们将用0x55555555(01010101010101010101010101010101)和X与运算,就能求得X的奇数位,再左移1,就能将奇数位变为偶数位。

同理,用0xAAAAAAAA(10101010101010101010101010101010)和X与运算,就能得到X的偶数位,再右移1,就能将偶数位变为奇数位。

上代码:

#define _CRT_SECURE_NO_WARNINGS#include <stdio.h>#define CHANGE_ODD_EVEN(x) (((x&0x55555555)<<1)|((x&0xAAAAAAAA)>>1))int main(){int num = 0;int changed_num = 0;int i = 0;int ret = 0;int count = 0;printf("请输入一个数:");scanf("%d",&num);printf("这个数的2进制序列是:\n");for(i=31; i>=0; i--){printf("%d",num>>i&1);}printf("\n");ret = CHANGE_ODD_EVEN(num);printf("奇数偶数位交换后序列是:\n");for(i=31; i>=0; i--){printf("%d",ret>>i&1);}return 0;}
结果显示:



0 0
原创粉丝点击