//题目名称:交换奇偶位
//题目内容:
//写一个宏,可以将一个整数的二进制位的奇数位和偶数位交换。
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
//方法:将偶数位全部右移一位,奇数位全部左移一位
//用宏来实现
#define SWAP(SWAP_NUM) ((0xaaaaaaaa & (SWAP_NUM)) >> 1) + ((0x55555555 & (SWAP_NUM)) << 1)
//用函数来实现
//方法一
int Swap1(int m)
{
int ret = ((0xaaaaaaaa & m) >> 1) + ((0x55555555 & m) << 1);
return ret;
}
//方法二:直接按每两位操作
int Swap2(int m)
{
int i = 0;
for (i = 1; i < 32; i = i + 2)
{
int t1 = m & (1 << i);
int t2 = m & (1 << i - 1);
if (t1 == 0)
{
m = m & ~(1 << i - 1); //奇数位 置0
}
else
{
m = m | (1 << i - 1); //奇数位 置1
}
if (t2 == 0)
{
m = m & ~(1 << i); //偶数位 置0
}
else
{
m = m | (1 << i); //偶数位 置1
}
}
return m;
}
int main()
{
int m = 10;
int ret1 = Swap1(m);
int ret2 = Swap2(m);
int ret3 = SWAP(m);
printf("%d\n", ret1);
printf("%d\n", ret2);
printf("%d\n", ret3);
return 0;
}
本文含有隐藏内容,请 开通VIP 后查看