收藏 分销(赏)

第十章编译预处理与位运算.ppt

上传人:xrp****65 文档编号:13161416 上传时间:2026-01-27 格式:PPT 页数:20 大小:141.50KB 下载积分:10 金币
下载 相关 举报
第十章编译预处理与位运算.ppt_第1页
第1页 / 共20页
第十章编译预处理与位运算.ppt_第2页
第2页 / 共20页


点击查看更多>>
资源描述
,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,第,10,章 编译预处理与位运算,10.1,编译预处理,编译预处理,:,是在编译前由编译系统中的预处理程序对源程序的预处理命令进行加工。,源程序中的预处理命令均以,“,#”,开头,,命令,末尾不加分号,,它们可以写在程序中的任何位置,,作用域,是从出现位置开始到源程序的结束,.,10.1.1,宏定义,宏定义是定义一个标识符来代替一个字符串。,宏定义有不带参数的宏定义和带参数的宏定义两种。,1,不带参数的宏定义,定义形式:,#define,标识符 字符串,功能:用一个指定的标识符(即名字,称为宏名)来代表一个字符串。,例如:,#define PI 3.1415926,说明:,(,1,)与其他标识符相区别,宏名一般用大写字母表示。,(,2,)编译预处理时,将程序中的宏名用字符串代替,这种将宏名替换成字符串的过程称为“宏展开”。,(,3,)使用宏可以减少程序中重复书写或修改某些字符串的工作量,.,(,4,)在程序中出现在双引号中或其他字符串中与宏名相同的字符串,不能作为宏处理。,(,5,),#define,命令的作用范围从定义位置至源程序结束,但可以用,#,undef,终止其作用域,。,例,1,:,#define PI 3.1415926,main(),float,l,s,r,;,scanf(%d,&r,);,l=2.0*PI*r;,s=PI*r*r;,printf(l,=%,fn,l,);,printf(s,=%,fn,s,);,main(),float,l,s,r,;,scanf(%d,&r,);,l=2.0*3.1415926*r;,s=3.1415926*r*r;,printf(l,=%,fn,l,);,printf(s,=%,fn,s,);,展开,10.1.1,宏定义,例,2,:,#define PI 3.1415926,main(),#,undef,PI,fun(),10.1.1,宏定义,10.1.1,宏定义,(,6,)宏定义时,可以引用已定义的宏名,编译时,层层展开,。,例,3,:,#define PI 3.1415926,#define R 3.0,#define L 2*PI*R,#define X R+L,main(),y=,2*X,;,main(),y=,2*3.0+2*3.1415926*3.0,;,展开,(,7,),宏名是一个常量标识符,,不是变量,不分配内存空间。,2,带参数的宏定义,定义形式:,#define,标识符,(,参数表,),字符串,功能:用指定的带参数的标识符来代表一个字符串。,注意:带参数的宏展开时要用实参字符串替换形参字符串。,例,4,:,#define,S(x,)2*x*x,main(),y=S(2+2);,main(),y=,2*2+2*,2+2,;,展开,注意,:展开时用实参字符串,2+2,替换形参字符串,x,,,2+2,是字符串,不能看做表达式,即,S,不能展开为,2*(2+2)*(2+2),。,10.1.1,宏定义,10.1.2,文件包含,文件包含是一个源程序通过,#include,命令把另外一个文件的全部内容嵌入到源程序中。,文件包含命令有如下两种格式:,#include,#include,文件名,功能:将指定文件的全部内容放到该命令行所在的位置。,说明:命令,#include,在搜索文件时只检索,C,语言编译系统所确定的标准目录,而命令,#include,文件名,在搜索文件时首先对使用包含文件的源程序文件所在的目录进行检索,若没有找到指定的文件,再在标准目录中检索。,10.2,位运算,数据在计算机内部是以二进制补码形式存储的。,1,按位与运算符:,&,若参与运算的两个操作数对应的两个二进制位都是,1,,则对应位结果为二进制位,1,,否则为,0,。,例,1,:求,5&3,的值。,运算过程如下:,0000,0000,0000,0101,(,5,的补码),&0000,0000,0000,0011,(,3,的补码),0000,0000,0000,0001,(,1,的补码,即,5&3=1,),2,按位或运算符:,|,若参与运算的两个操作数对应的两个二进制位有一个为,1,,则对应位结果为二进制位,1,,否则为,0,。,例,2,:求,5|3,的值。,运算过程如下:,0000,0000,0000,0101,(,5,的补码),|0000,0000,0000,0011,(,3,的补码),0000,0000,0000,0111,(,7,的补码,即,5|3=7,),10.2,位运算,3,按位异或运算符:,若参与运算的两个操作数对应的两个二进制位相异(一个为,1,,另一个为,0,),则对应位结果为二进制位,1,,否则为,0,。,例,3,:求,53,的值。,运算过程如下:,0000,0000,0000,0101,(,5,的补码),0000,0000,0000,0011,(,3,的补码),0000,0000,0000,0110,(,6,的补码,即,53=6,),10.2,位运算,4,按位取反运算符:,“”,的操作数只有一个,若操作数的某二进制位为,1,,则对应位结果为,0,,若操作数的某二进制位为,0,,则对应位结果为,1,,,例,4,:求,5,的值。,运算过程如下:,0000,0000,0000,0101,(,5,的补码),1111,1111,1111,1010,(,-6,的补码,即,5=-6,),10.2,位运算,5,左移运算符:,左移运算的一般形式为:,操作数,移位位数,功能:将一个操作数的所有二进制位依次左移若干位,高位移出并舍弃,低位补,0,。,例,5,:求,53,的值。,运算过程如下:,0000,0000,0000,0101,(,5,的补码),3,0000,0000,0000,0101,000,(,40,的补码,即,5,左移运算的一般形式为:,操作数,移位位数,功能:将一个操作数的所有二进制位依次右移动若干位。若操作数为无符号数或正数,移出的低位被舍弃,高位补,0,。这种移位操作又称逻辑右移。若操作数为有符号数的负数,即最高位为,1,时,右移时高位补,1,,以保持符号位不变,低位移出并舍弃。这种移位操作又称算术右移。,例,6,:求,51,的值。,运算过程如下:,0000,0000,0000,0101,(,5,的补码),1,0000,0000,0000,00100,(,2,的补码,即,51=2,),10.2,位运算,7,位运算应用举例,例,10.1,取一个整数,a,从右端开始的第,47,位。,程序如下:,#include,main(),unsigned,a,b,c,d,;,scanf(%o,&a,);,b=a4;,c=(04);,d=,b&c,;,printf(%o,%dn%o,%dn,a,a,d,d,);,10.2,位运算,10.3,本章考点,宏定义。,文件包含。,位运算。,10.4,典型试题详解,1,有如下程序:,#define N 2,#define M N+1,#define NUM 2*M+1,main(),int,i;,for(i,=1;i=,NUM;i,+),printf,(,%,dn,i);,该程序中的,for,循环执行的次数是,_,。,正确答案:,6,(知识点:不带参数的宏定义),2,程序中头文件,type1.h,的内容是:,#define N 5,#define M1 N*3,程序如下:,#include type1.h,#define M2 N*2,main(),int,i;,i=M1+M2;,printf,(,%,dn,i);,程序编译后运行的输出结果是,_,。,正确答案:,25,(知识点:文件包含、不带参数的宏定义),10.4,典型试题详解,3,以下程序的输出结果是,_,。,#define SQR(X)X*X,main(),int,a=16,k=2,m=1;,a/=,SQR(k+m)/SQR(k+m,);,printf(%dn,a,);,正确答案:,2,(知识点:带参数的宏定义),10.4,典型试题详解,4,有以下程序:,main(),int,x=3,y=2,z=1;,printf(%d,n,x/y&z,);,程序运行后的输出结果是,_,。,A,),3 B,),2C,),-1D,),0,正确答案:,D,(知识点:位运算),10.4,典型试题详解,5,有以下程序:,main(),unsigned,a,b,c,;,a=0 x3;,b=a|0 x8;,c=b1;,printf(%d,%d,n,b,c,);,程序运行后的输出结果是,_,。,A,),-11 12B,),-6 13C,),12 24D,),11 22,正确答案:,D,(知识点:位运算),
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服