宏定义浅谈 用宏定义交换数的奇偶位 用宏定义找出两个数最大值
来源:互联网 发布:数据分析师教材 编辑:程序博客网 时间:2024/05/27 14:13
1.什么是宏定义:宏定义是C语言提供的三种预处理其中的一种,这三种定义包含:宏定义、文件包含。条件编译,宏定义是对于文本进行替换,比如:
#define MAX 1000 则这里就是用1000替换MAX ,需要强调的是,宏定义不做文件的检查,即不做类型的判断。
2.定义宏函数:还是举例子说明:#define SQUARE(x) x*x 若在上述声明后把x设为5;则预处理器就会用5*5来替换上述x;这里需要强调括号的问题,假若printf(“%d\n”,SQUARE(x+1)),这里最终输出的值为11而不是36,应为预处理先将X变为了10,最后输出相当于10+1=11。总之宏是替换。
例1:
用宏定义找出两个数最大值
#define MAX(a,b) ((a)>(b)?(a):(b))
例2:
用宏定义交换一个数的奇偶位
分析一下:简单来说就是将第0位和第1位交换,第二位和第三位交换,以此类推,我们需要将奇数位和偶数位找出来,(x&0x55555555)>>1得到奇数位与原来相同但偶数位为0的二进制数,(x&0xAAAAAAAA)>>1得到偶数位与原来相同但奇数位为0的二进制数;最终两个二进制数按位或就得到结果。
#define SWAP(x)\
((x&0x55555555)>>1|(x&0xAAAAAAAA)>>1)
3.#和##:其中#是把一个宏参数变成对应的字符串,比如:
int i=10;
#define PRINT(FORMAT, VAULE)\ //最后的'\'是续行作用。
printf(“the vaule of "#VAULE”is"FORMAT"\n",VAULE);
.....
printf(“%d”,i+5); 在这部分代码中#VAULE会被预处理为VAULE ,最终会得到the vaule of i+3 is 13。
那对于##,它可以把两边的符号合成一个符号,需要强调的是 最终必须产生一个合法的标识符。
4.宏的优缺点:宏的速度快,宏与类型无关,但除非宏比较短,否则会大大增加程序的长度,而且宏没法调试,其次宏不够严谨。
- 宏定义浅谈 用宏定义交换数的奇偶位 用宏定义找出两个数最大值
- 【C语言】宏定义交换二进制数的奇偶位
- 宏实现奇偶位的交换,两个数最大值
- 定义交换两个数的宏
- 用宏定义来做两个数的交换
- 宏定义交换函数-交换两个数的值
- 两个数和三个数的最大值和最小值宏定义
- 宏定义实现一个int型的数的奇偶位的互换
- 用宏定义求三个数中的最大值
- 用宏定义实现 得到两个数的最值
- 如何实现两个数交换的交换以及宏定义的编写
- 用宏定义最大值
- 用宏实现将一个十进制数对应的二进制数的奇偶位交换
- 用宏定义,不用?:和比较switch等求两个数中较大的数
- 【c语言】写一个宏定义,实现的功能是将一个int型的数的奇偶位互换
- 用宏定义求三个数中最小的数
- 宏定义交换变量 之 异或交换数原理
- 定义一个宏比较两个数a、b的大小
- Object类的基本方法!!!
- 手机页面下拉刷新效果
- 一个程序的执行过程
- python3.6.3+opencv3.3.0学习笔记九--动态物体检测
- C/C++ typedef用法详解(干货)
- 宏定义浅谈 用宏定义交换数的奇偶位 用宏定义找出两个数最大值
- 简单购物车Demo_全选+反选+商品计价
- 职场新人八字箴言
- 困难的串UVa129
- Quartz教程 第7课 TriggerListener和JobListener
- Python注释详解
- MONI_Fragment+Drawerlayout+TagLayout+Viewpager+imageloader
- 用户信息列表 查询+年龄,性别搜索 +全部删除,批量删除+添加用户+修改密码
- 总和 添加数据删除数据修改密码