写一个宏可以将一个数字的奇数位和偶数位交换
解题思路:首先,提取奇数位和偶数位。以数字5例,5的二进制序列为0101,则按照题目要求交换之后应为1010。将数字·5与0X5555555进行与运算就会得到偶数位;同理,将数字5与0XAAAAAAAA进行与运算,得到偶数位。为了完成交换,只需将奇数位和偶数位进行移位即可。具体实现代码如下:
#include<stdio.h>
#define swap(num) (((num&(0x55555555)) << 1)|((num >> 1)&(0x55555555)))
int main()
{
int num = 0;
printf("请输入一个数字\n");
scanf("%d", &num);
printf("%d", swap(num));
}
使用宏实现两个数中求较大值
解题思路:使用srand((unsigned)time(NULL)),使得每次产生的随机数会发生变化,使用随机函数得到两个随机值,并将其控制在0到100,然后使用宏定义完成比较并输出。实现代码如下:
#include<stdio.h>
#include<time.h>
#include<stdlib.h>
#define MAX(x,y) ((x)>(y)?(x):(y))
int main()
{
int num1 = 0;
int num2 = 0;
srand((unsigned)time(NULL));
num1 = rand()%100;
num2 = rand()%100;
printf("num1 = %d, num2 = %d \n",num1, num2);
printf("两个数的最大者是:%d",MAX(num1,num2));
return 0;
}