自考计算机基础与程序设计11_第1页
自考计算机基础与程序设计11_第2页
自考计算机基础与程序设计11_第3页
自考计算机基础与程序设计11_第4页
自考计算机基础与程序设计11_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

本文格式为Word版,下载可任意编辑——自考计算机基础与程序设计11

第九章

位运算与预处理

第一节位运算其次节宏定义第三节文件包含第四节预编译

共26页

第2页

运算符

()括号单目运算符算术运算符关系运算符规律运算符条件运算符

改变表达式中的优先级关系

++;--;!;-(负),*(指针),(取地址)*;/;%+;;;=;===;!=||?:

赋值运算符逗号运算符

=;+=;-=;*=;/=;%=,低

位运算符

将参与运算的两个操作数,按对应的二进制位分别进行以下运算

按位与

|按位或

~

^

位左移

位右移

按位取反按位异或

2)算术表达式的格式:~是单目运算符:~a其余都是双目运算符:ab,a|b,a2,b23)操作步骤1)将运算分量转化为二进制(默认8位二进制)转化时右端对齐,假使位数不够,左边补符号位,即正数补0,负数补1.inta=3,b=5,d;d=ab?

a00000011

b00000101

2)再针对每个二进制位进行位运算3)运算后的结果转回为十进制

位运算符

操作步骤1)将运算分量转化为二进制(默认8位二进制)2)再针对每个二进制位进行位运算3)结果转回十进制

1.按位与--按位与运算:假使两个对应的位都是1,则该位为1,否则为0.inta=3,b=5,d;d=ab?

0000001110000010100000001

1)将a,b转化二进制2)进行位与运算3)将结果转回十进制

位运算符

操作步骤1)将运算分量转化为二进制(默认8位二进制)2)再针对每个二进制位进行运算3)结果转回十进制

2.按位或--|按位或运算:假使两个对应的位有一个1,则该位为1,否则为0.inta=3,b=5,d;d=a|b?

000000117|0000010100000111

1)将a,b转化二进制2)进行位或运算3)将结果转回十进制

位运算符

操作步骤1)将运算分量转化为二进制(默认8位二进制)2)再针对每个二进制位进行运算3)结果转回十进制

3.按位异或--^按位异或运算:假使两个对应的位不同,则为1,否则为0.00000011inta=3,b=5,d;d=a^b?

6

~

0000010100000110

1)将a转化二进制2)进行位异或运算3)将结果转回十进制

位运算符

操作步骤1)将运算分量转化为二进制(默认8位二进制)2)再针对每个二进制位进行运算3)结果转回十进制

4.按位取反--~按位取反运算:假使位为1,则结果为0,假使位为0,结果为1.注意:单目运算符,格式:~a~inta=5,b;b=~a?

0000010111111010符号位为1,说明是负数

-6转十进制

1)将a转化二进制2)进行位取反运算除符号外,位取反100001013)将结果转回十进制末尾+110000110

位运算符

操作步骤1)将运算分量转化为二进制(默认8位二进制)2)再针对每个二进制位进行运算3)结果转回十进制

5.位左移()和位右移()将一个数的全部二进制位左移或右移若干位.格式:左边是移位处理的对象,右边是整数表达式,表

示移动多少位a2a2201

00000101

inta=5,b;b=a2?b=a2;

a20001010000000101a200000001

1)左移时,低位补02)右移时,对于正数,高位补0,对于负数,高位补1

位运算符

将参与运算的两个操作数,按对应的二进制位分别进行以下运算

~按位取反

按位与

|

^

位左移

位右移

按位或按位异或

3)优先级~取反,位移位与^位异或|位或4)结合性:取反是自右向左其余是自左向右注意:1)位运算都只能针对整数和字符型数据2323.0错误2)位运算和赋值运算符一起构成复合赋值运算符=,|=,^=,=,=

位运算符举例:00000011inta=3,b=11;表达式~ab结果?8~a11111100000010110000100000000011inta=3,b=11;表达式a|b结果?|0000101100001011共26页第11页

运算符高

()括号单目运算符算术运算符关系运算符规律运算符条件运算符

改变表达式中的优先级关系

++;--;!;-(负),*(指针),(取地址),~*;/;%+;-,;;=;===;!=^|||?:

赋值运算符逗号运算符

=;+=;-=;*=;/=;%=,低

预处理C语言程序的执行过程:编写源程序(.c)编译程序(.obj)链接程序可执行程序(.exe)执行程序,获得结果

预处理:程序被编译以前,编译系统会先对程序中三种特别的命令进行〞预先处理〞,然后将预处理结果和源程序进行编译.宏定义预处理

#define#include

用一个名字代替一个字符串使用库函数时,包含相应头文件

文件包含条件编译

#ifdef….#endif依照不同条件选择编译不同的程序部分

预处理宏的使用:包括宏定义、宏调用和宏展开三部分1)编程人员为了缩短编写代码的长度,用宏定义说明用一个宏名代替一个长的字符串。例如:#definePI3.14159262)在编程时,用到长字符串的地方用宏名替代,这个过程称为例如:S=PI*r*r;宏调用。3)在编译前,系统如何理解这些宏调用?根据宏定义,系统自动将所有宏名换回长字符串,这个过程称为宏展开.我们阅读别人编写的宏调用也做这样的替换举例:#definePI3.1415926main(){intr=3;doubles,d;d=2*PI*r;/*圆周长*/S=PI*r*r;/*面积*/}main(){intr=3;doubles,d;d=2*3.1415926*r;/*圆周长*/S=3.1415926*r*r;/*面积*/}

预编译

宏展开

预处理使用宏的意义:

举例:#definePI3.1415926main(){intr=3;doubles,d;d=2*PI*r;/*圆周长*/S=PI*r*r;/*面积*/}

优点:1)用短小有意义的名字代替一长串的字符,减少输入量2)便于修改.修改一个地方,则全部修改

预处理宏分为:无参宏和带参宏

1)无参宏定义:告诉系统,用标识符来表示一个字符序列宏定义命令宏名,一般大写

常数,表达式

格式:#define

标识符

字符序列

不以分号结尾定义符号常量的方法就是

分隔用空格分隔用空格

宏定义写在函数的外面,一般在文件开头一种宏定义#definePI3.14159262)无参宏调用:在程序里,用到字main()符序列的地方改用标识符{intr=3;doubles,d;d=2*PI*r;/*圆周长*/3)无参宏展开:系统自动将宏名替S=PI*r*r;/*面积*/换为字符序列d=2*3.1415926*rs=3.1415926*r*r;}

预处理进行宏定义时,可以引用已定义的宏名,可以层层替换举例:#defineR3#definePI3.1415926#defineD2*PI*Rmain(){printf(“%f〞,D);}

D2*PI*R2*3.1415926*3

预处理1)带参宏定义:多个参数由逗号分隔

格式:#define

标识符(形参列表)字符序列隔开用空格

隔开用空格

2)带参宏定义的调用:标识符(实参列表);/*实参可以是数值和表达式*/

3)带参宏定义的展开(系统如何理解带参的宏调用?):宏调用置换为字符序列.将字符序列中,所有形参符号(a,b)用实参符号(3,4)来置换,替换的过程是简单的符号置换

#definemax(a,b)(ab)?a:bmax(3,4)max(3,4)展开为34?3:4结果:4

举例:#definemax(a,b)(ab)?a:bmain(){inta=3,b=4,m;m=max(3,4);printf(“%d〞,m);}

预处理带参宏:

#defineV(s1,s2)s1=i*w;s2=i*hmain(){inti=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*h

遇到宏调用,将宏调用置换为字符序列.将字符序列中,所有形参符号用实参符号来置换,替换的过程是简单的符号置换

形参符号:(s1,s2)实参符号:(a,b)

将s1=i*w;s2=i*h中,所有的s1替换为a,s2替换为b,其余不变a=i*w;b=i*h;

a=12,b=15;

预处理带参宏:

将字符序列中,所有形参符号替换为对应实参符号

#defineS(x)x*xmain(){intm;m=S(3);m=S(3+1);}3*3(3+1)*(3+1)?结果:3+1*3+17注意:替换的过程是简单的字符置换,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论