练习宏的题目
定义一个宏,用于计算两个整数的和:
定义一个宏,用于计算两个整数的差:
定义一个宏,用于计算两个整数的积:
定义一个宏,用于计算两个整数的商:
定义一个宏,用于交换两个变量的值:
定义一个宏,用于判断两个数的大小,输出最大的值:
定义一个宏,用于判断两个数的大小,输出最大的值:
定义一个宏,用于判断一个整数是否为偶数:
宏可以在C语言程序中使用例子:
#include <stdio.h>
#define ADD(x, y) ((x) + (y))
#define SUB(x, y) ((x) - (y))
#define MUL(x, y) ((x) * (y))
#define DIV(x, y) ((x) / (y))
#define MAX(x,y) ((x>y)?(x):(y))
#define MIN(x,y) ((x<y)?(x):(y))
#define SWAP1(x,y) {x=x+y;y=x-y;x=x-y;}
#define SWAP2(x,y) {x=x^y;y=x^y;x=x^y;}
//#define EVEN(x) ((x)&0x01)
#define EVEN(x) (((x)%2== 0) ? 1 : 0)
int x = 6;
int y = 3;
int main()
{
int z;
//z = y & 0x01; //可以把y改成x进行测试
z = y | 0x01; //可以把y改成x进行测试
int sum = ADD(x, y); // sum = 8
int sum1 = SUB(x,y);
int sum2 = MUL(x, y);
int sum3 = DIV(x, y);
int sum4 = EVEN(x);
int sum5 = MIN(x, y);
printf("最大值Max number is:%d\n", MAX(x, y));
printf("最小值Min number is:%d\n", MIN(x, y));
printf("交换前:x=%d,y=%d\n", x, y);
SWAP1(x, y);
printf("交换后:x=%d,y=%d\n", x, y);
SWAP2(x, y);
printf("再次交换后:x=%d,y=%d\n", x, y);
printf("和为:% d\n" , sum);
printf("差为:% d\n", sum1);
printf("积为:% d\n", sum2);
printf("商为:% d\n", sum3);
printf("输出1为偶数% d\n", sum4);
printf("111偶数111: % d\n", z);
unsigned char a = 0x03, b = ~a;
printf("a=0x%X\n", a);
printf("b=0x%X\n", b);
}
位运算符:
与:& ,AND,有0出0,全1出1
3 | 0011 | 6 | 0110 | |
1 | 0001 | 1 | 0001 | |
结果 | 1 | 结果 | 0 |
//#define EVEN(x) ((x)&0x01)
宏定义使用按位与判断最低位结果为1则为奇数,0为偶数
或:| ,OR,有1出1,全0出0
3 | 0011 | 6 | 0110 | ||
| | 1 | 0001 | 1 | 0001 | |
结果 | 0011 | 结果 | 111 |
非: ! ,NOT,有1出0,有0出1
非最好只操作一个位,控制单片机的高低电平
3 | 0011 | 6 | 0110 | ||
! | |||||
结果 | 1100 | 结果 | 1001 |
与非:NAND,先按与的操作,然后结果取反
或非:NOR,先按或的操作,然后结果取反
或非:NOR,先按或的操作,然后结果取反
异或:^ , XOR,相异为1,相同为0
同或:XNOR,相同为1,相异为0