![预处理位操作_第1页](http://file4.renrendoc.com/view/6c45a061ff96866225c19f7133f029f4/6c45a061ff96866225c19f7133f029f41.gif)
![预处理位操作_第2页](http://file4.renrendoc.com/view/6c45a061ff96866225c19f7133f029f4/6c45a061ff96866225c19f7133f029f42.gif)
![预处理位操作_第3页](http://file4.renrendoc.com/view/6c45a061ff96866225c19f7133f029f4/6c45a061ff96866225c19f7133f029f43.gif)
![预处理位操作_第4页](http://file4.renrendoc.com/view/6c45a061ff96866225c19f7133f029f4/6c45a061ff96866225c19f7133f029f44.gif)
![预处理位操作_第5页](http://file4.renrendoc.com/view/6c45a061ff96866225c19f7133f029f4/6c45a061ff96866225c19f7133f029f45.gif)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
课程主要内容预处理位操作问题与习题第一部分专题主要内容
1.1宏定义1.2条件编译1.3文件包含2.1位操作1.1宏定义(1)宏定义普通宏#definePI(3.1415926)带参数的宏#definemax(a,b)((a)>(b)?(a),(b))取消定义#undef MacroName为什么要用宏定义维护性:有时我们需要将某个特定数据(如某个数据表的大小)在程序中出现的所有实例统统加以修改,我们希望能够只做一个改动就达到目的#defineMAXSIZE100在函数调用的时候会带来重大的系统开销,因此我们有时希望有一个程序块,看上去像一个函数,但却没有函数调用的开销#definemax(a,b)(((a)>=(b))?(a):(b))提高程序的易读性:文字比数字要容易理解多,一个好的宏名可以顾名思义。1.1宏定义(2)宏定义的特点宏定义值使用宏名代替一个字符串,不做语法检查对程序中用双括号括起来的字符串内部的字符,即使与宏名相同,也不进行替换函数调用和宏定义的区别函数调用时,先求出实参表达式的值,然后代入形参。而使用带参数的宏只是进行简单的字符替换对于函数调用,对实参要进行类型检查,如果实参与形参类型不一致,应进行类型转换,如果无法转换,编译时会出错。但是宏定义不会做类型检查宏定义和类型定义的区别宏定义不做语法检查,可以把任何字符串定义成类型#defineAinteger/*integer不是一个合法的类型*/使用宏定义结果有时与预期的不同#defineT1structstudent*Typedefstructstudent*T2;T1a,b;/*相当于structstudent*a,b,b不是结构体指针,与预期的不同*/T2a,b;1.1宏定义(3)使用宏定义需要注意不要忽视宏定义中的空格#definef(x)(x)+1//实际上是把f定义成了(x)(x)+1
对于不带参数的宏,若宏值多于一项,一定要使用括号#defineMAX(M+N)要给每个参数加上括号,否则可能会影响计算的优先级#defineabs(x)(x>=0)?x:-xz=abs(a+b);/*相当于z=(a+b>=0)?a+b:-a+b//修改后#defineabs(x)((x)>=0?(x):-(x)尽量用typedef而不是宏定义去定义类型1.2条件编译条件编译例子
#ifdefBMW #defineSIZE16 #else#defineSIZE32 #endif条件编译指令#ifdef…#else…#endif#ifndef…#else…#endif#if1…#else…#endif#if0…#else…#endif条件编译的应用解决头文件重复包含的问题在调试时,用条件编译的方式将debug语句加入;在修改Bug时候,用条件编译方式引入新的修正,并保留原来的程序;1.3文件包含头文件包含#include“xxxx.h”含义是在编译时将头文件的内容加入到包含文件中。头文件包含的方式#include“xxxx.h”到本级目录去找。#include<xxxx.h>到系统默认目录和本级目录去找。重复包含(重复定义)由于头文件包含可以嵌套,那么C文件就有可能包含多次同一个头文件,就可能出现重复定义的问题的通过条件编译开关来避免重复包含(重复定义)例如#ifndef__headerfileXXX__
#define__headerfileXXX__
…文件内容
…#endif2.1位操作(1)基本位操作符<<,>>如(0x01)<<4=0x10;(0x80)>>4=0x08位操作应用举例乘法、除法,例如a*8可以写成a<<3;地址计算,例如一个32位的地址装在元素类型是char的数组a[4]中(假设按照从低到高存放),那么计算这个地址的方法为((a[3]<<24)|(a[2]<<16)|(a[1]<<8)|a[0]容易出现的问题尽量使用无符号变量,避免产生符号错误;注意避免发生数据溢出;2.1位操作(2)位运算符例子分析请分析下面问题的含义。
#typedefunsignedchar
UINT1
#typedefunsignedshort
UINT2
#typedefunsignedlong
UINT4问题1:
#define
MC_GET_CHAR(__data__)
\ (*((UINT1*)(__data__))) 问题2: #defineMC_GET_SHORT(__data__)\ ((UINT2)((((UINT2)(*((UINT1*)(__data__))))<<8)\ |((UINT2)(*((UINT1*)(__data__)+1)))&0x00ff)))2.1位操作(3) 问题3:
#define
MC_GET_LONG(__data__)
\ ((((UINT4)MC_GET_SHORT((__data__)))<<16)\ |(((UINT4)MC_GET_SHORT(__data__+2))&0x0000ffff)) 问题4:
#defineMC_GET_3BN(__data__)
\ ((((UINT4)MC_GET_CHAR((__data__)))<<16)\ |(((UINT4)MC_GET_SHORT(__data__+1))&
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中图版(北京)八年级地理上册2.2《主要的气候类型》听课评课记录
- 人教版七年级地理上册:1.1《地球和地球仪》听课评课记录3
- 2025年高性能铁氧体一次料合作协议书
- 星球版地理八年级上册《第一节 合理利用土地资源》听课评课记录3
- 人教版历史八年级下册第13课《香港和澳门的回归》听课评课记录
- 鲁教版地理七年级下册9.1《自然特征与农业》听课评课记录1
- 五年级数学下册听评课记录《第4单元 3分数的基本性质》人教版
- 粤人版地理八年级上册《第三节 水资源》听课评课记录1
- 湘教版数学七年级下册1.3《二元一次方程组的应用》听评课记录1
- 苏科版九年级数学听评课记录:第80讲期中期末串讲
- 2024年全国高考真题新课标理综生物试卷(山西、河南、云南、新疆)(解析版)
- 小学五年级英语阅读理解(带答案)
- 2024二十届三中全会知识竞赛题库及答案
- 成人重症患者人工气道湿化护理专家共识 解读
- 2-3-分子生物学与基因工程
- 2024年全国统一考试高考新课标Ⅱ卷语文+数学+英语试题(真题+答案)
- (正式版)YS∕T 5040-2024 有色金属矿山工程项目可行性研究报告编制标准
- 2024年全国甲卷高考化学真题试题(原卷版+含解析)
- 焦煤集团5MW10MWh储能技术方案
- JT-T-617.7-2018危险货物道路运输规则第7部分:运输条件及作业要求
- 树木吊装施工专项施工方案
评论
0/150
提交评论