《第5讲编译预处理和位运算.ppt》由会员分享,可在线阅读,更多相关《第5讲编译预处理和位运算.ppt(24页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 第第5 5讲编译预处理和位运算讲编译预处理和位运算一、编译预处理一、编译预处理 1 1、宏定义、宏定义 2 2、文件包含、文件包含 二、位运算二、位运算 1、概念、概念:用标识符来表示一个字符串,标识符叫宏名。用标识符来表示一个字符串,标识符叫宏名。一、宏定义:一、宏定义:(P5)2、无参宏定义、无参宏定义 1)无参宏定义的一般)无参宏定义的一般格式格式:#define 标识符标识符 字符串字符串 例如:例如:#define PI 3.14159 2)作用:)作用:在宏定义之后,凡是该标识符出现的地方用对应在宏定义之后,凡是该标识符出现的地方用对应的字符串来代替。的字符串来代替。上面的定义之
2、后,凡是上面的定义之后,凡是PI都用都用3.14159来代替。来代替。例例 输入半径,计算以该半径为圆的周长与圆面积、输入半径,计算以该半径为圆的周长与圆面积、球的体积与表面积。球的体积与表面积。#include#define PI 3.14159void main()float r,yzc,ymj,qbmj,qtj;scanf(%f,&r);yzc=2*PI*r;ymj=PI*r*r;qbmj=4*PI*r*r;qtj=4*PI*r*r*r/3;printf(%f,%f,%f,%fn,yzc,ymj,qbmj,qtj);3、带参数的宏定义带参数的宏定义 (P8)1)带参宏定义的一般)带参宏定
3、义的一般格式格式:#define 标识符标识符(参数表参数表)字符串字符串 例如:例如:#define ADD(x,y)x+y 2)作用:)作用:在宏定义之后,凡是该标识符出现的地方用对应在宏定义之后,凡是该标识符出现的地方用对应的字符串来代替,参数也作相应的替换。的字符串来代替,参数也作相应的替换。上面的定义之后,程序中如果出现上面的定义之后,程序中如果出现ADD(4,5),则,则用用 4+5 来代替,出现来代替,出现ADD(a,b),则用,则用 a+b 来代替。来代替。#include#define PI 3.14159#define AREA(r)PI*r*rvoid main()flo
4、at x,s;x=10.0;s=AREA(x);printf(s=%.1fn,s);写出下面程序的结果。写出下面程序的结果。执行结果:执行结果:s=314.2#include#define ADD(x,y)x+y#define MAX(x,y)xy?x:yvoid main()int a=4,b=5,c,d;c=ADD(a,b);d=MAX(a,b);printf(c=%dtd=%dn,c,d);float w,z;w=ADD(5.6,-5.8);z=MAX(5.6,-5.8);printf(w=%.1ftz=%.1fn,w,z);写出下面程序的结果。写出下面程序的结果。执行结果:执行结果:c
5、=5 d=5w=-0.2 z=5.6写出下面程序的结果。写出下面程序的结果。#include#define MUL(x,y)x*yvoid main()int a=3,b=4,c=5,d=6,m1,m2;m1=MUL(a,b);m2=MUL(a+b,c+d);printf(m1=%dn,m1);printf(m2=%dn,m2);执行结果:执行结果:m1=12m2=29修改方法修改方法1:#include#define MUL(x,y)(x)*(y)void main()int a=3,b=4,c=5,d=6,m1,m2;m1=MUL(a,b);m2=MUL(a+b,c+d);printf(m
6、1=%dn,m1);printf(m2=%dn,m2);执行结果:执行结果:m1=12m2=77修改方法修改方法2:#include#define MUL(x,y)x*yvoid main()int a=3,b=4,c=5,d=6,m1,m2;m1=MUL(a,b);m2=MUL(a+b),(c+d);printf(m1=%dn,m1);printf(m2=%dn,m2);执行结果:执行结果:m1=12m2=771、文件包含是文件包含是C语言的一个重要功能,其作用是将语言的一个重要功能,其作用是将另外一个文件的内容包含进来。另外一个文件的内容包含进来。C语言使用语言使用#include来实现,
7、命令格式:来实现,命令格式:#include 文件名文件名#include 二、二、文件包含文件包含 (P10)例如:例如:#include stdio.h#include 2、文件包含通常用来解决程序使用、文件包含通常用来解决程序使用C的库函数和公的库函数和公共符号常量的问题。例如:共符号常量的问题。例如:sqrt()函数、函数、EOF。3、两种格式的区别两种格式的区别#include “文件名文件名”表示先在源程序文件的当前表示先在源程序文件的当前目录下查找文件,如果当前目录下未找到文件再到包目录下查找文件,如果当前目录下未找到文件再到包含目录下查找。含目录下查找。#include 表示只
8、在包含目录下查找。表示只在包含目录下查找。包含目录是编译系统的一个参数包含目录是编译系统的一个参数,在,在VC 6.0下通下通过过“工具工具”菜单中的菜单中的“选项选项”、“目录目录”来查询与设来查询与设置,而在置,而在DEV C+下通过下通过“工具工具”菜单中的菜单中的“编译选编译选项项”、“目录目录”、“C包含文件包含文件”来查询与设置。来查询与设置。二、位运算二、位运算 (P44)位是指二进制数中的一位,其值为位是指二进制数中的一位,其值为0或者或者1。位运位运算包括算包括与、或、非、异或、左移、右移与、或、非、异或、左移、右移。参与位运算的两个操作数必须是参与位运算的两个操作数必须是字
9、符型字符型或者或者整型整型,不能是实数不能是实数。如果是操作数是负数,则用操作数的。如果是操作数是负数,则用操作数的补码补码形式形式参与运算;如果是操作数是字符,则用操作数的参与运算;如果是操作数是字符,则用操作数的ASCII码码参与运算。参与运算。在进行位运算时,最好把二个数化成二进制,然后在进行位运算时,最好把二个数化成二进制,然后根据位运算的运算规则进行计算。根据位运算的运算规则进行计算。每个位运算的规则是不变的,但计算结果可能与每个位运算的规则是不变的,但计算结果可能与参与计算的参与计算的操作数的位数有关操作数的位数有关。1、按位与运算、按位与运算include void main
10、()char a=3,b=50;printf(a&b=%dn,a&b);程序执行结果:程序执行结果:a&b=2例例1 写出下面程序的执行结果。写出下面程序的执行结果。0000 0011=3&0011 0010=50 0000 0010=2规则:二个为规则:二个为1才为才为1,否则为,否则为0。#include void main()char a=-3,b=50;printf(a&b=%dn,a&b);程序执行结果:程序执行结果:a&b=48例例2 写出下面程序的执行结果。写出下面程序的执行结果。1111 1101=-3&0011 0010=50 0011 0000=48 2、按位或运算、按位或
11、运算|#include void main()char a=3,b=50;printf(a|b=%dn,a|b);程序执行结果:程序执行结果:a|b=51例例1 写出下面程序的执行结果。写出下面程序的执行结果。0000 0011=3|0011 0010=50 0011 0011=51规则:二个为规则:二个为0才为才为0,否则为,否则为1。#include void main()char a=-3,b=50;printf(a|b=%dn,a|b);程序执行结果:程序执行结果:a|b=-1例例2 写出下面程序的执行结果。写出下面程序的执行结果。1111 1101=-3|0011 0010=50 1
12、111 1111=-1 3、按位异或运算、按位异或运算#include void main()char a=3,b=50;printf(ab=%dn,ab);程序执行结果:程序执行结果:ab=49例例1 写出下面程序的执行结果。写出下面程序的执行结果。0000 0011=3 0011 0010=50 0011 0001=49规则:相同为规则:相同为0,相异为,相异为1。#include void main()char a=-3,b=50;printf(ab=%dn,ab);程序执行结果:程序执行结果:ab=-49例例2 写出下面程序的执行结果。写出下面程序的执行结果。1111 1101=-3
13、0011 0010=50 1100 1111=-49 4、按位非运算、按位非运算#include void main()char a=3;printf(a=%dn,a);程序执行结果:程序执行结果:a=-4例例1 写出下面程序的执行结果。写出下面程序的执行结果。0000 0011=3 1111 1100=-4规则:规则:0变成变成1,1变成变成0。#include void main()char a=-3;printf(a=%dn,a);程序执行结果:程序执行结果:a=2例例2 写出下面程序的执行结果。写出下面程序的执行结果。1111 1101=-3 0000 0010=2 5、左移运算、左移
14、运算#include void main()char a=3;printf(a2=%dn,a2);程序执行结果:程序执行结果:a2=12例例1 写出下面程序的执行结果。写出下面程序的执行结果。规则:符号位参与移位,左边移出的位丢弃,右边补规则:符号位参与移位,左边移出的位丢弃,右边补0。#include void main()char a=-3;printf(a3=%dn,a3);程序执行结果:程序执行结果:a#include void main()char a=24;printf(a2=%dn,a2);程序执行结果:程序执行结果:a2=6例例1 写出下面程序的执行结果。写出下面程序的执行结果。规则:符号位规则:符号位不不参与移位,右边移出的位丢弃。参与移位,右边移出的位丢弃。#include void main()int a=-50,b=127;printf(a2=%dn,a2);printf(b2=%dn,b2);程序执行结果:程序执行结果:a2=-13 b2=31例例2 写出下面程序的执行结果。写出下面程序的执行结果。规律:每右移规律:每右移1位相当于整除位相当于整除2。