#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#define SWAP_BIT(n) (n = ((n & 0xaaaaaaaa) >> 1)+((n & 0x55555555) << 1))
int main()
{
	int n = 0;
	scanf("%d", &n);
	SWAP_BIT(n);
	printf("%d\n", n);
	return 0;
}/*#define SwapIntBit(n) (((n) & 0x55555555) << 1 | ((n) & 0xaaaaaaaa) >> 1)
交换奇偶位,需要先分别拿出奇偶位。既然是宏,分别拿出用循环不是很现实,那就用&这些位
的方式来做。奇数位拿出,那就是要&上010101010101……,偶数位拿出,就是
要&上101010101010……,对应十六进制分别是555……和aaa……,一般我们默认是32位整数,
4位对应一位16进制就是8个5,8个a。通过& 0x55555555的方式拿出奇数位和& 0xaaaaaaa的方式
拿出偶数位。奇数位左移一位就到了偶数位上,偶数位右移一位就到了奇数位上,最后两个数字
或起来,就完成了交换。

※这个宏只能完成32位以内的整形,要想完成64位的,那就将5和a的数量翻倍即可。

简单点解释
奇数位和1按位与不会变,与0按位与就会变成0。偶数位也一样。所以上述方式就可以把奇数位和
偶数位拿出来。因为移位后奇数位的数就跑到了偶数位,偶数位的数就跑到了奇数位上。而且移位
后相加时,偶数位的数变到奇数位后加上另一个数的对应的数是0。

奇数位(从右往左一次是0、1、2、3位)
    0101
 &  1010
    0000>>1
	0000
偶数位
	0101
&   0101
    0101<<1
	1010
最后
    0000
+   1010
==  1010 

*/