1.
#include <stdio.h>
#define SWAP(x) (((x&(0x55555555)) << 1) | ((x&(0xAAAAAAAA)) >> 1))
//0x55555555是十六进制的10101010101010101010101010101010,
int main()
{
int x = 0;
printf("请输入一个数字\n");
scanf_s("%d", &x);
printf("%d\n", SWAP(x));
return 0;
}
//0x55555555是十六进制的10101010101010101010101010101010,
//将(x&(0x55555555))<<1; x按位与0x55555555后得到的二进制奇数位与x相同但偶数位均为0,然后再向左移一位,变成偶数位为原来的奇数位,且移动后奇数位全为0;
//将(x&(0xAAAAAAAA))>>1; x按位与0xAAAAAAAA后得到的二进制偶数位与x相同但奇数位均为0,然后再向右移一位,变成奇数位为原来的偶数位,且移动后偶数位全为0;
//最后将两个二进制按位或((x&(0x55555555))<<1) | ((x&(0xAAAAAAAA))>>1),便最终得到了交换后的数。
2.
#include <stdio.h>
#define MAX(a,b) a>b?a:b
int main()
{
int x = 10;
int y = 15;
printf("两个数字中较大的是%d\n", MAX(x, y));
return 0;
}