1.解题思路:
在思考如何解题之前我们要知道,二进制的每一位代表的数字相加为这个数的值,而二进制的数又可分为偶数位和奇数位,即偶数位和奇数位的和就为该数的值,首先利用按位与的思路得到一个整数的偶数位的值和奇数位的值,然后将奇数位的值左移1位,偶数位的值右移一位后相加就可得到交换后的值
#include<stdio.h> #define Swap(n) n=(((n&0x55555555)<<1)+((n&0xaaaaaaaa)>>1)) int main() { int a = 10; Swap(a); printf("%d\n",a); Swap(a); printf("%d", a); }