写一个宏可以将一个数字的奇数位和偶数位交换。

要求:使用宏将一个数字的奇数位和偶数位进行交换

代码如下:

#include<stdio.h>
#include<stdlib.h>
#define CHANGE(I) (((I)&(0x55555555))<<1)|(((I)&(0xAAAAAAAA))>>1)
int main()
{
	int i = 0;
	printf("请输入一个整数:");
	scanf("%d",&i);
	printf("交换奇偶数位之后:%d\n",CHANGE(i));

	system("pause");
	return 0;
}


注意: 5=0101(5的二进制四位表示),用8个5的32位序列表示奇数位,奇数位左移就到了偶数位;同理A=10=1010(10的二进制四位表示),用8个A的32位序列表示偶数位,偶数位右移就到了奇数位。

               00000000 00000000 00000000 00001010
         &
               01010101 01010101 01010101 01010101
            ——————————————————————
               00000000 00000000 00000000 00000000

左移后:  00000000 00000000 00000000 00000000

               00000000 00000000 00000000 00001010
         &
               10101010 10101010 10101010 10101010
           ——————————————————————
               00000000 00000000 00000000 00001010
右移后:    00000000 00000000 00000000 00000101

左移后:   00000000 00000000 00000000 00000101
 右移后:  00000000 00000000 00000000 00000000
——————————————————————————
              00000000 00000000 00000000 00000101    //5


运行结果为:

猜你喜欢

转载自blog.csdn.net/qq_41420688/article/details/80012171