简单的宏使用实例

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

解题思路:首先,提取奇数位和偶数位。以数字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;
}


猜你喜欢

转载自blog.csdn.net/qq_37415461/article/details/80552170