自考计算机基础与程序设计

上传人:新** 文档编号:571130880 上传时间:2024-08-08 格式:PPT 页数:23 大小:667KB
返回 下载 相关 举报
自考计算机基础与程序设计_第1页
第1页 / 共23页
自考计算机基础与程序设计_第2页
第2页 / 共23页
自考计算机基础与程序设计_第3页
第3页 / 共23页
自考计算机基础与程序设计_第4页
第4页 / 共23页
自考计算机基础与程序设计_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《自考计算机基础与程序设计》由会员分享,可在线阅读,更多相关《自考计算机基础与程序设计(23页珍藏版)》请在金锄头文库上搜索。

1、共 26 页 第 2 2 页第九章第九章 位运算与预处理位运算与预处理第一节第一节 位运算位运算第二节第二节 宏定义宏定义第三节第三节 文件包含文件包含第四节第四节 预编译预编译运算符运算符l() () 括号括号 改变表达式中的优先级关系改变表达式中的优先级关系l单目运算符单目运算符 +;-;!;-+;-;!;-( (负负) ), ,* *( (指针指针) ),&,&( (取地址取地址) )l算术运算符算术运算符 * *;/;% ;/;% +;- +;-l关系运算符关系运算符 ;=;=;= =;!=;!=l逻辑运算符逻辑运算符 & & | |l条件运算符条件运算符 ?:?:l赋值运算符赋值运算

2、符 =;+=;-=;*=;/=;%=;+=;-=;*=;/=;%=l逗号运算符逗号运算符 , ,高低n位位运算符运算符2)算术表达式的格式算术表达式的格式: 是单目运算符是单目运算符:a 其余都是双目运算符其余都是双目运算符 :a&b,a|b,a23)操作步骤操作步骤 1)将将运算分量运算分量转化为转化为二进制二进制(默认默认8位位二进制二进制)&|按位按位与与按位按位或或按位按位取反取反按位按位异或异或位位左移左移位位右移右移int a=3, b=5,d;d=a&b ?将参与运算的两个操作数,按对应的二进制位分别进行以下运算转化时转化时右端对齐右端对齐,如果位数不够如果位数不够,左边左边补补

3、符号位符号位,即即正数正数补补0,负数负数补补1.0000 0011a0000 0101b2)再针对再针对每个二进制每个二进制位位进行进行位位运算运算3)运算后的结果转回为运算后的结果转回为十进制十进制n位运算符位运算符1.按位按位与与-& 按按位位与与运算运算:如果如果两个对应的位两个对应的位都是都是1,则该位则该位为为1,否则否则为为0.int a=3, b=5,d;d=a&b ?操作步骤操作步骤 1)将将运算分量运算分量转化为转化为二进制二进制(默认默认8位位二进制二进制) 2)再针对再针对每个二进制位每个二进制位进行进行位位运算运算 3)结果转回十进制结果转回十进制0000 00110

4、000 0101& 1000000 011)将a,b转化二进制2)进行位与运算3)将结果转回十进制n位运算符位运算符2.按位按位或或-| 按按位位或或运算运算:如果如果两个对应的位两个对应的位有一个有一个1,则该位则该位为为1,否则否则为为0.int a=3, b=5,d;d=a|b ?操作步骤操作步骤 1)将将运算分量运算分量转化为转化为二进制二进制(默认默认8位位二进制二进制) 2)再针对再针对每个二进制位每个二进制位进行运算进行运算 3)结果转回十进制结果转回十进制0000 00110000 0101| 1110000 071)将a,b转化二进制2)进行位或运算3)将结果转回十进制n位运

5、算符位运算符3.按位异或按位异或- 按按位位异或异或运算运算:如果如果两个对应的位两个对应的位不同不同,则为则为1,否则为否则为0.int a=3,b=5,d;d=ab ?操作步骤操作步骤 1)将将运算分量运算分量转化为转化为二进制二进制(默认默认8位位二进制二进制) 2)再针对再针对每个二进制位每个二进制位进行运算进行运算 3)结果转回十进制结果转回十进制61)将a转化二进制2)进行位异或运算3)将结果转回十进制0000 00110000 0101 0110000 0n位运算符位运算符4.按位按位取反取反- 按按位位取反取反运算运算:如果位如果位为为1,则结果则结果为为0,如果位如果位为为0

6、,结果结果为为1.int a=5,b;b=a ?操作步骤操作步骤 1)将将运算分量运算分量转化为转化为二进制二进制(默认默认8位位二进制二进制) 2)再针对再针对每个二进制位每个二进制位进行运算进行运算 3)结果转回十进制结果转回十进制0000 0101 0101111 1-6注意:单目运算符,格式:a1)将a转化二进制2)进行位取反运算3)将结果转回十进制1000 01011000 0110转十进制除符号外,位取反末尾+1符号位为1,说明是负数n位运算符位运算符5.位左移位左移() 将一个数的全部二进制位将一个数的全部二进制位左移左移或或右移右移若干位若干位.int a=5,b;b=a2;操

7、作步骤操作步骤 1)将将运算分量运算分量转化为转化为二进制二进制(默认默认8位位二进制二进制) 2)再针对再针对每个二进制位每个二进制位进行运算进行运算 3)结果转回十进制结果转回十进制201)左移时,低位补02)右移时,对于正数,高位补0,对于负数,高位补1格式格式:左边左边是是移位处理的对象移位处理的对象,右边右边是整数表达式是整数表达式,表示移动多少位表示移动多少位a20000 0101a2 0000 00011n位运算符位运算符3)优先级优先级 取反取反 位移位移 & &位与位与 位异或位异或 | |位或位或 4)结合性:取反是结合性:取反是自自右右向向左左 其余是其余是自自左左向向右

8、右注意:注意:1)1)位运算都只能针对整数和字符型数据位运算都只能针对整数和字符型数据 2&3 2&3.02&3 2&3.0错误错误2)2)位运算位运算和和赋值运算符赋值运算符一起构成一起构成复合赋值运算符复合赋值运算符 & &=,=,| |=,=, =,=,= = &|按位取反按位取反按位与按位与 按位或按位或按位异或按位异或位左移位左移位右移位右移将参与运算的两个操作数,按对应的二进制位分别进行以下运算共 26 页 第 1111 页位运算符位运算符举例:int a=3,b=11;表达式a&b结果?int a=3,b=11;表达式a|b结果?0000 00111111 1100a0000 1

9、011&0000 100080000 00110000 1011|0000 101111运算符运算符l() () 括号括号 改变表达式中的优先级关系改变表达式中的优先级关系l单目运算符单目运算符 +;-;!;-+;-;!;-( (负负) ), ,* *( (指针指针) ),&,&( (取地址取地址),), l算术运算符算术运算符 * *;/;% ;/;% +;- +;- l关系运算符关系运算符 ;=;=;b)?a:bmain() int a=3,b=4,m; m=max(3,4); printf(“%d”,m);格式格式: :#define#define 标识符标识符( (形参列表形参列表)

10、) 字符序列字符序列隔开用空格隔开用空格多个参数由逗号分隔#define max(a,b) (ab)?a:bmax(3,4)max(3,4) 展开为 34?3:42)带参宏定义的带参宏定义的调用调用: 标识符标识符(实参列表实参列表);/*实参可以是数值和表达式实参可以是数值和表达式*/宏调用宏调用置换为置换为字符序列字符序列. .将将字符序列字符序列中,中,所有形参所有形参符号符号( (a,ba,b) )用用实实参参符号符号( (3,4)3,4)来来置换置换,替换的过程,替换的过程是简单的是简单的符号置换符号置换 结果:4预处理预处理l带参带参宏宏:#define V(s1,s2) s1=i

11、*w;s2=i*hmain() int i=3,w=4,h=5,a,b; V(a,b); printf(“a=%d,b=%d”,a,b); V(a,b)置换为s1=i*w;s2=i*ha=12,b=15;a=12,b=15;将将s1=i*w;s2=i*h中,所有的中,所有的s1s1替换为替换为a a,s2s2替换为替换为b,b,其余不变其余不变形参符号: (s1,s2)实参符号: (a,b)a=i*w;b=i*h; 遇到遇到宏调用宏调用, ,将将宏调用宏调用置换为置换为字符序列字符序列. .将将字符序列字符序列中,中,所有形参所有形参符号符号用用实参实参符号符号来来置换置换,替换的过程,替换的

12、过程是是简单的简单的符号置换符号置换 预处理预处理l带参带参宏宏:#define S(x) x*xmain() int m; m=S(3); m=S(3+1); 注意注意: :替换的过程是简单的替换的过程是简单的字符字符置换置换, ,不做语法检查不做语法检查 (3+1)*(3+1)? 结果结果:3+1*3+1举例:#define S (x) (x)*(x)main() m=S(3); m=S(3+1); 所以,宏定义中加上括号,提高程序安全性1673*3将将字符序列字符序列中,所有中,所有形参符号形参符号替换为替换为对应实参符号对应实参符号预处理预处理l带参带参宏定义宏定义:#define S

13、 (x) x*xmain() int m; m=S(3); 注意注意:s:s与与(x)(x)多一个空格,多一个空格,S S变为一个无参宏,而宏调用出错变为一个无参宏,而宏调用出错注意注意, ,在宏名和参数间没有空格在宏名和参数间没有空格出错预处理预处理举例:举例:#define N 3#define M(a,b) a%bmain() int x=3,y=5; printf(“%dn”,M(x+2,y+3); printf(“%dn”,N*M(x,y); M(x+2,y+3)的宏展开?8x+2%y+3 N*M(x,y)的宏展开?43*x%y遇到遇到宏调用宏调用, ,将将宏调用宏调用置换为置换为字

14、符序列字符序列. .将将字符序列字符序列中,中,所有形参所有形参符号符号用用实参实参符号符号来来置换置换,替换的过程,替换的过程是是简单的简单的符号置换符号置换 预处理预处理举例:举例:#define M 3#define P(a,b) a%bmain() int a=5,b=8; int x,y; x=P(a+3,b); y=M*P(a,b); printf(“%dt%d”,x,y); P(a+3,b)的宏展开?x=8a+3%b M*P(a,b)的宏展开?y=73*a%b8 7遇到遇到宏调用宏调用, ,将将宏调用宏调用置换为置换为字符序列字符序列. .将将字符序列字符序列中,中,所有形参所有形参符号符号用用实参实参符号符号来来置换置换,替换的过程,替换的过程是是简单的简单的符号置换符号置换

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 大杂烩/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号