C++学习经典课件ppt第02章 C++基本语法_第1页
C++学习经典课件ppt第02章 C++基本语法_第2页
C++学习经典课件ppt第02章 C++基本语法_第3页
C++学习经典课件ppt第02章 C++基本语法_第4页
C++学习经典课件ppt第02章 C++基本语法_第5页
已阅读5页,还剩83页未读 继续免费阅读

下载本文档

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

文档简介

1、计算机所处理的数据以一定形式存放在内存中,数据计算机所处理的数据以一定形式存放在内存中,数据的存储方式以及能够进行的合法运算都与数据类型直的存储方式以及能够进行的合法运算都与数据类型直接相关。接相关。C+C+的特点之一就是提供了丰富的数据类型,的特点之一就是提供了丰富的数据类型,以便处理各种不同的数据。以便处理各种不同的数据。数据类型数据类型总是与运算封装总是与运算封装在一起,本质上是面向对象的。在一起,本质上是面向对象的。本章将简要介绍本章将简要介绍C+C+中的数据类型及相关运算,以及常量、变量、表达式、中的数据类型及相关运算,以及常量、变量、表达式、语句等,最后介绍简单的输入输出方法。语句

2、等,最后介绍简单的输入输出方法。第二章第二章 C+基础知识基础知识第二章第二章 C+基础知识基础知识21 C+的词法单位的词法单位25 运算符、表达式和语句运算符、表达式和语句26 简单的输入输出简单的输入输出24 数组与字符数组数组与字符数组23 常量和变量常量和变量22 C+ 中的数据类型中的数据类型ok2.1 C+的词法单位的词法单位211 C+的字符集的字符集 212 关键字关键字 213 标识符标识符(ID,identifier) 214 标点符号标点符号 ok2.1.1 C+的字符集的字符集ASCII码码字符集是计算机中的常用字符集。字符集是计算机中的常用字符集。它包括英文字母及阿

3、拉伯数字等它包括英文字母及阿拉伯数字等128个字符,个字符,存储一个存储一个ASCII码码占用一个字节占用一个字节单元。单元。由于汉字处理的需要,又出现了由于汉字处理的需要,又出现了汉字国汉字国标码标码等对应于不同语言的字符集。国标码等对应于不同语言的字符集。国标码的存储占用两个字节单元。的存储占用两个字节单元。Unicode字符集对各类字符进行字符集对各类字符进行统一的双统一的双字节编码字节编码。它包括了世界上多种语言的基本。它包括了世界上多种语言的基本字符,字符,最多可容纳最多可容纳65536个个字符。字符。 ASCII码码字符集,国标码字符集都是它的子集。字符集,国标码字符集都是它的子集

4、。okC+的字符集的字符集26个个小写字母小写字母 abcdefghijklmnopqrstuvwxyz 26个个大写字母大写字母 ABCDEFGHIJKLMNOPQRSTUVWXYZ 10个个阿拉伯数阿拉伯数字字 0 1 2 3 4 5 6 7 8 9 其他符号其他符号 + - * / = , . _ : ; ? | ! # % & () 空格空格 C+语言使用下列基本字符来构成词法单位:语言使用下列基本字符来构成词法单位:2.1.1结束2.1.2 关关 键键 字字关键字(keyword)又称保留字。是由系统定义的具有特定含义的英文单词。关键字不能另作它用。C+区分大小写,关键字全部

5、由小写字母组成。标准C+(ISO14882)定义了74个关键字,具体的C+编译器还会做一些增删。常用关键字及分类见表2.1。ok 关关 键键 字字数据类型说数据类型说明符与修饰明符与修饰符符bool char wchar_t class const double enum float int long short signed struct union unsigned void volatile存储类型说存储类型说明符明符auto extern inline register static访问说明符访问说明符friend private protected public其它说明符其它说明符a

6、sm explicit namespace operator template this typedef typename using virtual 语句与标号语句与标号break case catch continue default do else for goto if return switch throw try while 运算符及逻运算符及逻辑值辑值delete false new sizeof true表表2-1 C+2-1 C+常用关键字及分类常用关键字及分类 ok 关关 键键 字字2.1.2结束 还有一些关键字本书未介绍:还有一些关键字本书未介绍: const_cast

7、dynamic_cast reinterpret_cast static_cast export mutable typeid 下面可用一些关键字代替逻辑运算符:下面可用一些关键字代替逻辑运算符:and and_eq bitand bitorCompl not or or_eqXor xor_eq not_eq2.1.3 标识符标识符标识符(标识符(IdentifierIdentifier,ID ID )是程序员定是程序员定义的义的“单词单词”,用来给变量、常量、数据类型、,用来给变量、常量、数据类型、函数等命名。函数等命名。合法标识符合法标识符由由字母或下划线字母或下划线开始开始,由,由字母

8、、字母、数字、下划线数字、下划线组成,其有效组成,其有效长度为长度为1 13131个字个字符符,长度超过,长度超过3131个字符者只识别个字符者只识别前前3131个字符个字符,VC+VC+标识符长度为标识符长度为1 1247247个字符。个字符。建议使用有一定含义的英文单词或拼音序建议使用有一定含义的英文单词或拼音序列作标识符,以提高列作标识符,以提高可读性可读性;另外尽量不用下;另外尽量不用下划线或双下划线打头,以免与系统定义的关键划线或双下划线打头,以免与系统定义的关键字冲突。字冲突。ok标识符标识符例例: 判断下面哪些是合法的标识符:判断下面哪些是合法的标识符: MyFileSalary

9、 94amountvoid94SalarySalary94$amountf3.5Num_of_Student2.1.3结束2.1.4 标点符号标点符号标点符号包括标点符号包括:#、( )、 ,、,、 :、:、 ;、;、 、 等。等。 标点符号的作用标点符号的作用:有一定的语法意义。如字符和字符串有一定的语法意义。如字符和字符串常量分别用常量分别用 和和 “ ”引起来。引起来。对语法符号起分隔作用。如对语法符号起分隔作用。如 ;等;等2.1.4结束2.2 C+中的数据类型中的数据类型图图2-1 C+的的数据结构数据结构实实 型型 float双精度型双精度型 doubleC+的数的数据类型据类型基

10、本数据基本数据类型类型非基本数非基本数据类型据类型数组数组 type 指针指针 type *结构结构 struct联合联合 union枚举枚举 enum类类 class整整 型型 int字符型字符型 char逻辑型逻辑型 bool无值型无值型 void实实 型型ok C+C+对基本数据类型也分别进行了封装,称对基本数据类型也分别进行了封装,称为为内置数据类型内置数据类型,内置数据类型不仅定义了数据,内置数据类型不仅定义了数据类型,类型,还定义了还定义了常用操作常用操作。本节仅介绍各种基本。本节仅介绍各种基本数据类型的定义,常用操作将在后面介绍。数据类型的定义,常用操作将在后面介绍。 C+C+为

11、强类型语言,所有数据的使用严格遵从为强类型语言,所有数据的使用严格遵从“先说明后使用先说明后使用”的原则,以便编译器进行编译。的原则,以便编译器进行编译。 整型整型用来存放整数,整数(有符号的整数)用来存放整数,整数(有符号的整数)在内存中存放的是它的补码,无符号数没有符在内存中存放的是它的补码,无符号数没有符号位,存放的就是原码。整数占用的字节数与号位,存放的就是原码。整数占用的字节数与机型有关,机型有关,3232位机上占用位机上占用4 4个字节。个字节。 字符型字符型用来保存字符,存储的是该字符的用来保存字符,存储的是该字符的ASCIIASCII码,码,占用一个字节。如大写字母占用一个字节

12、。如大写字母A A的的ASCIIASCII码为码为6565,在对应的,在对应的一个字节中存放的就是一个字节中存放的就是6565。字符型数据从本质上说也是。字符型数据从本质上说也是整数,可以是任何一个整数,可以是任何一个8 8位二进制整数。位二进制整数。 由于汉语系字符很多,用由于汉语系字符很多,用ASCIIASCII字符集处理远远不够,字符集处理远远不够,因此又创立了双字节字符集(因此又创立了双字节字符集(DBCSDBCS:double-byte double-byte character setcharacter set),每个字符用两个字节来编码。为便于),每个字符用两个字节来编码。为便于

13、软件的国际化,国际上一些知名公司联合制定了新的宽软件的国际化,国际上一些知名公司联合制定了新的宽字节字符标准字节字符标准UnicodeUnicode。该标准中所有字符都是双字。该标准中所有字符都是双字节的,不同的语言和字符集分别占用其中一段代码。这节的,不同的语言和字符集分别占用其中一段代码。这种用统一编码处理西文、中文及其它语言符号,就是种用统一编码处理西文、中文及其它语言符号,就是unicodeunicode码。码。C+C+同时也支持宽字符类型(同时也支持宽字符类型(wchar_twchar_t),或),或称双字节字符型称双字节字符型。 实型实型和和双精度型双精度型都用来存放实数,两者表示

14、的实数都用来存放实数,两者表示的实数精度不同。实数在内存中以规范化的浮点数存放,包括精度不同。实数在内存中以规范化的浮点数存放,包括尾数、数符和阶码。数的精度取决于尾数的位数,尾数、数符和阶码。数的精度取决于尾数的位数,32位位机上实型为机上实型为23位(因规范化数的数码最高位恒为位(因规范化数的数码最高位恒为1,不必,不必存储,实际为存储,实际为24位),双精度为位),双精度为52位。位。 逻辑型逻辑型也称也称布尔型布尔型,其取值为,其取值为true(逻辑真)和(逻辑真)和false(逻(逻辑假),存储字节数在不同编译系统中可能有所不同,辑假),存储字节数在不同编译系统中可能有所不同,VC+

15、6.0中为中为1个字节。布尔型在运算中可以和整型相互转个字节。布尔型在运算中可以和整型相互转化,化,false对应为对应为0,true对应为对应为1或非或非0无值型无值型主要用来说明函数的返回值类型,将在函数一章中主要用来说明函数的返回值类型,将在函数一章中具体介绍。具体介绍。 基本数据类型还可以加上一些修饰词,包括:基本数据类型还可以加上一些修饰词,包括:signed(有符号)、(有符号)、unsigned(无符号)、(无符号)、long(长)、(长)、short(短)。参见下表:(短)。参见下表:2. 2结束 类类 型型名名 称称占用字节数占用字节数取取 值值 范范 围围bool布尔型布尔

16、型 true, false(signed) char有符号字符型有符号字符型1-128 127unsiged char无符号字符型无符号字符型10 255(signed) short (int)有符号短整型有符号短整型2-32768 32767unsigned short (int)无符号短整型无符号短整型20 65535(signed) int (signed)有符号整型有符号整型4-231 (231-1)unsigned (int)无符号整型无符号整型40 (232-1)(signed) long (int)有符号长整型有符号长整型4-231 (231-1)unsigned long (i

17、nt)无符号长整型无符号长整型40 (232-1)float实型实型4-1038 1038double双精度型双精度型8-10308 10308long double长双精度型长双精度型8-10308 10308void无值型无值型0无值无值VC+中所有基本数据类型所有基本数据类型2.3 常量和变量2.3.1 变 量2.3.2 字面常量2.3.3 常变量及常量说明符const在程序中,常量和变量是用来表示数据的;在程序中,常量和变量是用来表示数据的;常量又分为字面常量、常变量;常量又分为字面常量、常变量;ok2.3.1 变 量1 1 变量说明变量说明 2 2 变量赋初值变量赋初值 变量变量,在

18、程序中是指可以改变值的量;,在程序中是指可以改变值的量;变量必须用标识符进行标识,称为变量必须用标识符进行标识,称为变量名变量名;变量有变量有类型类型之分,如整型变量、字符变量等;之分,如整型变量、字符变量等;任何变量都必须任何变量都必须先说明后使用先说明后使用;一是便于编译;一是便于编译程序为变量分配空间,二是便于编译时进行语程序为变量分配空间,二是便于编译时进行语法检查;法检查;变量使用的第一步,是给变量赋变量使用的第一步,是给变量赋初始值初始值;ok变量说明 在在C+C+中,变量说明的一般格式为:中,变量说明的一般格式为:存储类型存储类型数据类型数据类型 变量名变量名1 1, ,变量名变

19、量名2, 2, , ,变量名变量名n n; 下面是变量说明的几个例子:下面是变量说明的几个例子:int i, j, k; /说明三个整型变量说明三个整型变量i, j, kfloat x, y, z; /说明三个实型变量说明三个实型变量x, y, zchar c1, c2; /说明两个字符型变量说明两个字符型变量c1, c2double dx; /说明一个双精度型变量说明一个双精度型变量dx 变量说明 结束 变量赋初值(1 1)变量说明时直接赋初值。变量说明时直接赋初值。例如:例如:int a=3, b=4, c=5;int a=3, b=4, c=5;float x=3.0float x=3.

20、0;(2 2)用赋值语句赋初值。用赋值语句赋初值。严格的说,只有前严格的说,只有前者可称赋初值者可称赋初值例如:例如:float x, e;float x, e;x=3.5; x=3.5; e=2.71828;e=2.71828;2.3.1结束 给变量赋初值称为初始化,有两种方法:给变量赋初值称为初始化,有两种方法:2.3.2 字面常量1. 1. 整型常量整型常量 4. 4. 字符串常量字符串常量3. 3. 字符型常量字符型常量2. 2. 实型常量实型常量字面常量字面常量,指程序中直接给出的量;,指程序中直接给出的量;常量的值在程序执行过程中保持不变;并常量的值在程序执行过程中保持不变;并且且

21、存储在程序区存储在程序区,而非数据区;,而非数据区;根据取值和表示方法的不同,可分为以下根据取值和表示方法的不同,可分为以下几种:几种:ok整型常量十进制表示法十进制表示法八进制表示法八进制表示法十六进制表示法十六进制表示法其他表示法其他表示法即整数,可以有多种表示方法:ok 整数的十进制表示方法十进制表示与我们熟悉的书写方式相同。十进制表示与我们熟悉的书写方式相同。如如15 -24ok 整数的八进制表示 八进制表示八进制表示以以0 0开始,由数字开始,由数字0 0 7 7组成组成,用来,用来表示一个八进制数。表示一个八进制数。如:如:012012 / /八进制数八进制数1212,即十进制数,

22、即十进制数1010-0655-0655/八进制数八进制数-655-655,即十进制数,即十进制数-429-429ok 整数的十六进制表示 十六进制十六进制以以0X0X(大小写均可)开始,由数(大小写均可)开始,由数字字0 0 9 9和字母和字母A A F F(大小写均可)组成(大小写均可)组成,用来,用来表示一个十六进制数。表示一个十六进制数。以下是一些以下是一些常整数常整数的例子:的例子:0 x32A /0 x32A /十六进制数十六进制数32A32A,即十进制数,即十进制数810810-0 x2fe0 /-0 x2fe0 /十六进制数十六进制数-2fe0-2fe0, /即十进制数即十进制数

23、-12256-12256ok整数的其他表示方法 整型常量还可以表示整型常量还可以表示长整数长整数和和无符号整数无符号整数。长整型常数以长整型常数以 L L 或或 l l 结尾,无符号常整数以结尾,无符号常整数以 U U 或或 u u 结尾,以结尾,以 U LU L 或或 L UL U(大小写均可)(大小写均可)结尾则可表示无符号长整型常数。结尾则可表示无符号长整型常数。例如:例如:-84L-84L/十进制长整数十进制长整数-84-84026U026U/八进制表示的无符号整数八进制表示的无符号整数26260X32LU /0X32LU /十六进制表示的无符号长整型数十六进制表示的无符号长整型数32

24、32。整数 结束 实型常量( (1)1)一般形式一般形式与平时书写形式相同,与平时书写形式相同,由数字由数字 0 0 9 9和小数点组成和小数点组成。例如:。例如:0.23 -125.76 0.0 .46 -35.0.23 -125.76 0.0 .46 -35.(2) (2) 指数形式(也称为科学表示法)指数形式(也称为科学表示法)表示为表示为尾尾数乘以数乘以1010的次方形式,由的次方形式,由尾数尾数、E E或或e e和和阶数阶数组组成成。指数形式要求在。指数形式要求在E E或或e e前面的前面的尾数部分必须尾数部分必须有数字有数字,后面的,后面的指数部分必须为整数指数部分必须为整数。 例

25、例 : : 判断下列表示是否合法判断下列表示是否合法123E12 -.34e-2 E4 1.43E3.5 包含小数点和包含小数点和1010的幂的数为实型常量,有的幂的数为实型常量,有两种表示方法:两种表示方法:实数实数 结束结束字符型常量 字符常量是用单引号引起来的单个字符字符常量是用单引号引起来的单个字符。在。在内存中保存的是字符的内存中保存的是字符的ASCIIASCII码值。在所有字符码值。在所有字符中,有些是可显示字符,通常就用单引号引起中,有些是可显示字符,通常就用单引号引起来表示:来表示:a a /字符字符a a /字符字符 44/字符字符4 4 /空格字符空格字符有些是特殊情况字符

26、,如不可显示的字符等,有些是特殊情况字符,如不可显示的字符等,c+c+使用使用转义序列转义序列表示方法,如表示方法,如(祥见表祥见表2-32-3,此处略):此处略):n n /换行换行 / / 字符字符 字符常字符常 结束结束 4. 字符串常量字符串常量与字符型常量的区别字符串常量与字符型常量的区别字符串常量字符串常量aa占两个字节,存放占两个字节,存放aa和和 0 0,值为,值为0 x61000 x6100字符型常量字符型常量aa占一个字节,存放占一个字节,存放aa,值为,值为0 x610 x612.3.2结束结束用双引号引起来的若干个字符称为字符串常量用双引号引起来的若干个字符称为字符串常

27、量。例如例如:I am a Chinese.,123, a ,:I am a Chinese.,123, a , 2.3.3 常变量及常量说明符const用常量说明符用常量说明符constconst给字面常量起个名字(标识符),给字面常量起个名字(标识符),这个标识符就称为这个标识符就称为标识符常量标识符常量;因为标识符常量的说明和引用形式很像变量,所以也因为标识符常量的说明和引用形式很像变量,所以也称称常变量常变量;例如:;例如:constconst float PI=3.14159; float PI=3.14159;const const int Number_of_Student=10

28、0; int Number_of_Student=100;常变量必须也只能在说明时进行初始化;常变量必须也只能在说明时进行初始化;常变量初始化之后,不允许再被赋值;常变量初始化之后,不允许再被赋值;常变量必须先说明后使用;常变量必须先说明后使用;常变量存储在数据区,并且可以按地址访问,编译时常变量存储在数据区,并且可以按地址访问,编译时系统对常变量进行类型检查。系统对常变量进行类型检查。C+C+建议使用常变量,而不要使用文字常量。建议使用常变量,而不要使用文字常量。2.3.3 结束结束2.4 数组与字符数组2.4.1 2.4.1 数数 组组2.4.2 2.4.2 字字 符符 数数 组组本节介绍

29、一种用户自定义的导出数据类型本节介绍一种用户自定义的导出数据类型 数组类型数组类型ok2.4.1 数组数组是有限个数组是有限个同类型同类型元素的有序集合元素的有序集合,这些元,这些元素有一个共同的名字,每个元素以其在数组中的素有一个共同的名字,每个元素以其在数组中的位置区分位置区分,位置用,位置用下标下标表示。表示。 例如数列或向量就可以看作一个数组,其中的例如数列或向量就可以看作一个数组,其中的元素用一个下标即可确定。元素用一个下标即可确定。 矩阵也可看作一个数组,其中的元素需要用矩阵也可看作一个数组,其中的元素需要用“行行”、“列列”两个下标确定。两个下标确定。 数组下标的个数称作数组下标

30、的个数称作维数维数,上述代表数列的数,上述代表数列的数组和代表矩阵的数组分别称为一维数组和二维数组和代表矩阵的数组分别称为一维数组和二维数组。本节只介绍一维数组。组。本节只介绍一维数组。ok 一维数组定义一个一维数组的一般格式为:定义一个一维数组的一般格式为: 存储类型存储类型 数据类型数据类型 数组名数组名 常量常量 ; 数据类型指的是数组中元素的数据类型,数据类型指的是数组中元素的数据类型,可以是可以是C+中定义的任何一种数据类型。中定义的任何一种数据类型。 写在中括号中的常量用来定义数组大小,写在中括号中的常量用来定义数组大小,即数组中元素的个数。即数组中元素的个数。例如:例如:int

31、m5; /定义数组定义数组m, 其中有其中有5个整数个整数 const int N=3; float xN;/数组数组x中有中有3个实数个实数ok 一维数组 数组在存储单元中是按下标的顺序连续存放的,数组在存储单元中是按下标的顺序连续存放的,任何一个元素都可以单独访问,其标识方法是用任何一个元素都可以单独访问,其标识方法是用数组名和下标:数组名和下标: 数组名数组名 表达式表达式 表达式用来计算下标值。表达式用来计算下标值。C+C+中规定数组第一中规定数组第一个元素的下标为个元素的下标为0 0。okm4m3m2m1m0 x2x1x0 一维数组 C+C+中数组大小在编译时确定,编译系统按照定义为

32、中数组大小在编译时确定,编译系统按照定义为数组分配一段连续的存储单元,这段单元的大小也是不数组分配一段连续的存储单元,这段单元的大小也是不能改变的,因此数组大小不能用变量定义,而只能是一能改变的,因此数组大小不能用变量定义,而只能是一个正整数常量。个正整数常量。 下列定义是下列定义是非法非法的:的:int count;float scount;/数组个数不能是变量,且必数组个数不能是变量,且必/须在定义时指明须在定义时指明;const float Num=3;int nNum;/数组个数不能是实数数组个数不能是实数;对数组的访问对数组的访问指的指的是对数组元素的访问是对数组元素的访问,不能直接

33、将数,不能直接将数组名作为访问对象,对数组赋值也必须对每一个元素逐组名作为访问对象,对数组赋值也必须对每一个元素逐个赋值。个赋值。参见下例:参见下例: ok 一维数组int_arr3=int_arr2=int_arr1=int_arr0= 11231输出2.4.1结束结束1231+2=3【例【例21】使用数组的简单例子。】使用数组的简单例子。# include void main() int int_arr4;int_arr0=1; int_arr1=1; int_arr2=2;int_arr3=int_arr1+int_arr2;coutint_arr0n int_arr1n int_arr

34、2n int_arr3 n; 2.4.2 字符数组如果数组中的元素为字符,就称为如果数组中的元素为字符,就称为字符数组字符数组。例如:。例如:char string110; /可用来保存可用来保存1010个字符的字符数组个字符的字符数组; ;char city_name1 = N,a,n,j,i,n,g; /可用来保存可用来保存7 7个字符的字符数组个字符的字符数组; ;C+C+中字符数组用来保存字符串中字符数组用来保存字符串。允许直接用字符串常。允许直接用字符串常量给字符数组量给字符数组初始化初始化。例如:。例如:char city_name2=”Nanjing”;用字符串初始化,字符数组会

35、自动加上一个用字符串初始化,字符数组会自动加上一个串结束符串结束符00 。串结束符在字符串操作中具有十分重要的意。串结束符在字符串操作中具有十分重要的意义,因此在定义字符数组大小时,要注意留出足够的空义,因此在定义字符数组大小时,要注意留出足够的空间保存串结束符。间保存串结束符。ok 字符数组 为了处理字符串,为了处理字符串,C+中提供了若干中提供了若干字符串处理函字符串处理函数数,这些函数定义在文件,这些函数定义在文件string.h中,其中包括:中,其中包括: strlen(s),返回字符串,返回字符串s的实际长度(不包括的实际长度(不包括0););strcpy(s1,s2),将字符串,将

36、字符串s2中中0之前的所有字符依次之前的所有字符依次赋值到字符串赋值到字符串s1中,最后中,最后再加上一个再加上一个0。由于不能直接。由于不能直接对字符数组名赋值,所以将一个字符串的值赋给另一个字对字符数组名赋值,所以将一个字符串的值赋给另一个字符串必须用符串必须用字符串拷贝函数字符串拷贝函数完成。例如:完成。例如:char string220;string2=”VC+”;/非法非法strcpy(string2, “VC+”);/合法合法 字符数组【例【例22】 字符数组和字符串处理函数的应用。字符数组和字符串处理函数的应用。# include # include void main( ) c

37、har s1 =”Hello C+”;/初始化决定数组初始化决定数组s1有有10个元素个元素char s210, s320;s20= B; s21= e; s22=g; s23= i;s24= n; s25= 0; /对字符串结束处理非常重要对字符串结束处理非常重要strcpy(s3, s2);cout”The length of”s1”is:”strlen(s1)n;/只有字符数组可整体输出,因为有结束符只有字符数组可整体输出,因为有结束符couts2ts3ab/结果是结果是?根据右结合根据右结合原则其运算原则其运算过程如下:过程如下:a5b3.23F, 即即0F即即0优优先先级级运运算算符

38、符名名 称称语语 义义2!逻辑非逻辑非, 单目单目操作数的值为真,则结操作数的值为真,则结果为假果为假;12&逻辑与逻辑与,双目双目当两个操作数全为真时,当两个操作数全为真时,结果为真,否则为假结果为真,否则为假;13|逻辑或逻辑或,双目双目两个操作数中有一个为两个操作数中有一个为真,则结果为真真,则结果为真;逻辑运算符逻辑运算符 逻辑运算符用来进行逻辑运算。其操作数和运逻辑运算符用来进行逻辑运算。其操作数和运算结果均为算结果均为逻辑量逻辑量。运算结果同样可以作为一个。运算结果同样可以作为一个整整数数参与其他运算。参与其他运算。 由于由于逻辑值逻辑值和和整数整数之间的之间的对应关系,对

39、应关系,也允许也允许整型整型和和字符型字符型操作数进行操作数进行逻辑运算逻辑运算:21&021&0/逻辑与,逻辑与,2121与与0 0,结果为假:,结果为假:0 021|021|0/逻辑或,逻辑或,2121或或0 0,结果为真:,结果为真:1 1!21!21/逻辑非,逻辑非,2121的非,结果为假:的非,结果为假:0 0逻辑运算符逻辑运算符 位运算符(1)按位取反运算符)按位取反运算符“” (2)左移运算符)左移运算符“” (4)按位与运算符)按位与运算符“&” (5)按位或运算符)按位或运算符“|” (6)按位异或运算符)按位异或运算符“” okc+c+语言提供字位运

40、算,它对操作数的各个位进行操作。语言提供字位运算,它对操作数的各个位进行操作。(1 1)按位取反运算符)按位取反运算符“”将操作数的每个二进制位取反,即将操作数的每个二进制位取反,即1 1变为变为0 0,0 0变为变为1 1。例如,。例如,整数整数a a的值为的值为1001101110011011,则,则aa的值为的值为0110010001100100。(2 2)左移运算符)左移运算符“”运算一般格式为:运算一般格式为:ana”与左移运算符类同,将左操作数向右移动右操作数指定的与左移运算符类同,将左操作数向右移动右操作数指定的二进制位数,忽略移位后的小数部分,并在高位补二进制位数,忽略移位后的

41、小数部分,并在高位补0 0。一。一个整数右移个整数右移n n位相当于位相当于除以除以2 2的的n n次方,但比除法快。次方,但比除法快。 在在VC+6.0VC+6.0中有符号数右移时高位补符号位,严格对应除中有符号数右移时高位补符号位,严格对应除法。法。以上三种单目运算不影响数据本身的值,而是只产生一以上三种单目运算不影响数据本身的值,而是只产生一个中间量,这个中间量被引用后即不再存在。个中间量,这个中间量被引用后即不再存在。 (4 4)按位与运算符)按位与运算符“&”&”将两个操作数的对应位逐一进行按位逻辑与运算。运算规则将两个操作数的对应位逐一进行按位逻辑与运算。运算规则为

42、:对应位均为为:对应位均为1 1时,该位运算结果为时,该位运算结果为1 1;否则为;否则为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a & b 00001101a & b 00001101该运算可用来将整数的某些位置该运算可用来将整数的某些位置0 0,而保留所需要的位,上例,而保留所需要的位,上例保留了低四位。保留了低四位。(5 5)按位或运算符)按位或运算符“|”|”将两个操作数的对应位逐一进行按位逻辑或运算。运算规则将两个操作数的对应位逐一进行按位逻辑或运算。运算规则为:只要有一个数对应位为为:只要有一个数对应位为

43、1 1,该位运算结果即为,该位运算结果即为1 1;两个数;两个数对应位均为对应位均为0 0,该位结果为,该位结果为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a | b 01001111a | b 01001111该运算符可用来将整数的某些位置该运算符可用来将整数的某些位置1 1。上例高四位不变,低四。上例高四位不变,低四位全位全1 1。(6 6)按位异或运算符)按位异或运算符“”将两个操作数的对应位逐一进行按位异或运算。运算规则为:将两个操作数的对应位逐一进行按位异或运算。运算规则为:当对应位的值不同时,该位运算结果为当对应位的值不同

44、时,该位运算结果为1 1,否则为,否则为0 0。例如:。例如:a 01001101a 01001101b 00001111b 00001111a b 01000010a b 01000010该运算符可用来将一个整数的某些位取反,或将整型变量的该运算符可用来将一个整数的某些位取反,或将整型变量的值置值置0 0(将整型变量与自身按位异或)。上例低四位取反,(将整型变量与自身按位异或)。上例低四位取反,高四位不变。高四位不变。需要说明的一点是,以上例子中的整数都只取了低需要说明的一点是,以上例子中的整数都只取了低8 8位一个位一个字节。字节。4.赋值运算符ok 将数据存放到相应存储单元中称为将数据存

45、放到相应存储单元中称为赋值赋值,如果,如果该单元中已有值,赋值操作以新值取代旧值;从该单元中已有值,赋值操作以新值取代旧值;从某个存储单元中取出数据使用,称为引用,引用某个存储单元中取出数据使用,称为引用,引用不影响单元中的值,即一个量可以多次引用。不影响单元中的值,即一个量可以多次引用。常常量量只能引用,不能赋值。只能引用,不能赋值。 赋值通过赋值运算符赋值通过赋值运算符“=”来完成,其意义是将来完成,其意义是将赋值号右边的值送到左边变量所对应的单元中。赋值号右边的值送到左边变量所对应的单元中。赋值号不是等号,它具有方向性赋值号不是等号,它具有方向性。 C+C+将变量名代表的单元称为将变量名

46、代表的单元称为 “ “左值左值”,而将变,而将变量的值称为量的值称为“右值右值”。 左值必须是内存中一个左值必须是内存中一个可以访问且可以合法修改的对象可以访问且可以合法修改的对象,因此只能是变,因此只能是变量名,量名,而不能是常量或表达式而不能是常量或表达式。4.赋值运算符例如下面的赋值运算是错误的:例如下面的赋值运算是错误的:3.1415926=pi;/左值不能是常数左值不能是常数x+y=z;/左值不能是表达式左值不能是表达式const int N=30;N=40;/左值不能是常变量左值不能是常变量5.自增自减运算运算分前置和后置两种,运算分前置和后置两种,前置是先增减后引用前置是先增减后

47、引用,即先,即先对变量自加或自减,用新的值参与其他运算;对变量自加或自减,用新的值参与其他运算;后置则后置则是先引用后增减是先引用后增减,即用变量原来的值参与其他运算,即用变量原来的值参与其他运算,然后再对变量进行自加或自减然后再对变量进行自加或自减, ,例如:例如:int i=5, j=5, m, n;int i=5, j=5, m, n;m=i+;m=i+; / /后置;相当于后置;相当于m=i; i=i+1; m=i; i=i+1; / /结果:结果:i i的值为的值为6 6,m m的值为的值为5 5; ;n=+j;n=+j; / /前置;相当于前置;相当于j=j+1;n=j;j=j+1

48、;n=j; / /结果:结果:j j的值为的值为6 6,n n的值为的值为6 6; ;意义:使变量当前值加意义:使变量当前值加1 1或减或减1 1,再赋给该变量。再赋给该变量。要求:操作数只能是要求:操作数只能是变量变量,不能是常量或表达式;,不能是常量或表达式;ok sizeof( ) 运算符 用于计算一个操作数类型或一个变量的字用于计算一个操作数类型或一个变量的字节数。一般格式为:节数。一般格式为:sizeof (sizeof (数据类型数据类型) ) 或或 sizeof(sizeof(变量名变量名) ) 例如:例如:sizeof(int) 值为值为4 sizeof( float) 值为值

49、为4double x; sizeof( x) 值为值为8 2.5.1结束结束2.5.2 表达式1 算术表达式算术表达式 2 关系表达式关系表达式 3 逻辑表达式和逻辑表达式求值的优化逻辑表达式和逻辑表达式求值的优化 4 赋值表达式与复合赋值表达式赋值表达式与复合赋值表达式 5 逗号表达式逗号表达式 ok1.算术表达式使用时注意:使用时注意:1 1、表达式中每个变量都有确定的值时才能进、表达式中每个变量都有确定的值时才能进行表达式求值;行表达式求值;2 2、考虑到算术运算溢出和精度问题,应避免:、考虑到算术运算溢出和精度问题,应避免:(1 1)两个很接近的数直接相减;)两个很接近的数直接相减;(

50、2 2)除数是一个很小的数;)除数是一个很小的数;(3 3)整数的连续乘运算。)整数的连续乘运算。ok由算术运算符连接的表达式称为算术表达式由算术运算符连接的表达式称为算术表达式,例如:例如:a+b*3 ;2.关系表达式例如:例如:abcabc / /* *等同于等同于(ab)c(ab)c,先求,先求ab ab 的值,的值, 再将结果再将结果0 0或或1 1与与c c比较大小比较大小* */ /a+bc+da+bc+d / /* *等同于等同于(a+b)(c+d)(a+b)(c+d), 结果为结果为0 0或或1 1* */ /建议使用括号建议使用括号y=aby=ab / /* *计算计算aba

51、b的值的值0 0或或1 1 赋给赋给y y,y y的值为的值为0 0或或1 1* */ /由关系运算符连接的表达式。值为由关系运算符连接的表达式。值为truetrue或或falsefalse。ok3.逻辑表达式和逻辑表达式求值的优化由逻辑运算符连接的表达式称为逻辑表达式。逻辑表达式的由逻辑运算符连接的表达式称为逻辑表达式。逻辑表达式的值为值为truetrue或或falsefalse。这个值可对应整数。这个值可对应整数1 1或或0 0参与其他运算。参与其他运算。ok已知已知: int a=10, b=20, c=30;float x=1.8, y=2.4; ay|ab-!c按按优先级优先级与与结

52、合性结合性,其,其求值顺序求值顺序等同于:等同于:(ay)|(a(b-(!c)t1=1 t2=0t4=0 -&t3=0t5=bt6=1| 得整个表达式的值为:得整个表达式的值为:1 13.逻辑表达式和逻辑表达式求值的优化在求逻辑表达式值的过程中,一旦表达式的在求逻辑表达式值的过程中,一旦表达式的值能够确定,就不再逐步进行下面的运算。值能够确定,就不再逐步进行下面的运算。称为称为“求值优化求值优化”。已知已知: int a=10, b=20, c=30;求:求: ab | c+ /结果以及结果以及a,b,c的值的值t1=1整个表达式的值为整个表达式的值为 1 1可见可见: : 表达式表达

53、式 c+ c+ 已不需要计算已不需要计算所以所以: : c不变仍为不变仍为 30编程人员在使用逻辑运算时应当加以小心,优化计算固然编程人员在使用逻辑运算时应当加以小心,优化计算固然提高了运算效率,但可能产生副作用。提高了运算效率,但可能产生副作用。所谓副作用,就是所谓副作用,就是出乎设计人员的意料,得到预想不到的结果。出乎设计人员的意料,得到预想不到的结果。4.赋值表达式与复合赋值表达式 赋值表达式的格式为:赋值表达式的格式为: 变量变量 = = 表达式表达式 例如:例如:x=5+6;x=5+6;a=b=c=d+1a=b=c=d+1; ; 在在C+C+中,所有的双目算术运算符和位运算符均可与中

54、,所有的双目算术运算符和位运算符均可与赋值运算符组合成一个单一运算符,称为赋值运算符组合成一个单一运算符,称为复合赋值运复合赋值运算符算符。包括以下。包括以下1010个:个:+ = = * = / = % = = &= | = =复合赋值运算符的要求与格式与赋值运算符完全相同,复合赋值运算符的要求与格式与赋值运算符完全相同,表示为:表示为: 变量变量 复合赋值运算符复合赋值运算符 表达式表达式 它等同于它等同于 变量变量 = = 变量变量 运算符运算符 表达式表达式 例如:例如:x+=5x+=5 等同于:等同于:x=x+5x=x+5ok 逗号表达式 C+中,逗号既是分隔符,又是运算符,

55、中,逗号既是分隔符,又是运算符,用逗号连接起来的表达式称为逗号表达式。用逗号连接起来的表达式称为逗号表达式。 一般格式为:一般格式为:表达式表达式1,表达式,表达式2,表达式,表达式n 逗号表达式中的每一个表达式都会被运算,逗号表达式中的每一个表达式都会被运算,整个逗号表达式的值为最后一个表达式的值。整个逗号表达式的值为最后一个表达式的值。例如:例如:a=(x=3,x+=6,5+6);/a=11 x=92.5.2结束结束2.5.3算术类型转换和赋值类型转换1 1 不同类型数据的混合运算不同类型数据的混合运算 2 2 赋赋 值值 类类 型型 转转 换换 ok运算过程中,当某个二元运算符两边的操作

56、数类型不同但运算过程中,当某个二元运算符两边的操作数类型不同但属于类型相容时,系统先将精度低的操作数变换到与另一属于类型相容时,系统先将精度低的操作数变换到与另一操作数精度相同,而后再进行运算。操作数精度相同,而后再进行运算。 所谓类型相容,指的就是类型不同但系统可以所谓类型相容,指的就是类型不同但系统可以自动进行转换。自动进行转换。当赋值号的左值和右值类型不一致但属于类型相容时,当赋值号的左值和右值类型不一致但属于类型相容时,由系统自动进行类型转换。由系统自动进行类型转换。 1.不同类型数据的混合运算charshortintlongunsigned charunsigned shortuns

57、igned intunsigned longfloatdoublelong double数据类型转换方向数据类型转换方向ok具体规则如下:具体规则如下:(1 1)字符字符可以作为可以作为整数整数参与数值运算,参与数值运算,整数值为其整数值为其ASCIIASCII码码。(2 2)操作数为字符或短整型时,系统自动变换成)操作数为字符或短整型时,系统自动变换成整型整型。(3 3)操作数为实型时,系统自动变换成)操作数为实型时,系统自动变换成双精度型双精度型。(4 4)其余情况,当两操作数类型不同时,将精度低(或表示范)其余情况,当两操作数类型不同时,将精度低(或表示范围小)的操作数的数据类型变换到与

58、另一操作数类型相同再进围小)的操作数的数据类型变换到与另一操作数类型相同再进行运算行运算 例如有变量例如有变量: :char c1, c2; int i1, i2; float x1, x2;char c1, c2; int i1, i2; float x1, x2;则表达式则表达式x2=c1x2=c1* *i1+c1i1+c1* *x1+c1x1+c1* *c2c2的求值过程为:将的求值过程为:将c1c1转换成整型,完成转换成整型,完成c1c1* *i1i1,结果表示为,结果表示为t1t1;将;将c1c1和和x1x1均转换成双精度型,完成均转换成双精度型,完成c1c1* *x1x1,结果表示

59、为,结果表示为t2t2;将;将c1c1和和c2c2均转换成整型,完成均转换成整型,完成c1c1* *c2c2,结果表示为,结果表示为t3t3;然后然后t1t1转换成双精度型,完成转换成双精度型,完成t1+t2t1+t2,结果表示为,结果表示为t4t4;将;将t3t3转换成双精度型,完成转换成双精度型,完成t4+t3t4+t3,最后结果转为单精度型赋给,最后结果转为单精度型赋给x2x2。 2.赋值类型转换2.5.3结束结束系统自动进行类型转换规则:系统自动进行类型转换规则:1 1、实型数赋给整形变量:取整;注意溢出;、实型数赋给整形变量:取整;注意溢出;2 2、整型数赋给实型变量:先转换为实型数

60、;、整型数赋给实型变量:先转换为实型数;3 3、字符型数赋给整形变量:、字符型数赋给整形变量:ASCIIASCII码为依据;码为依据;分为两种情况:符号位是分为两种情况:符号位是0 0或或1 1时不同;时不同;若符号位为若符号位为1,则低位字节不变,高位字节全部置,则低位字节不变,高位字节全部置1再赋值。再赋值。4 4、绝对值较大的数赋给表达范围较小的数据、绝对值较大的数赋给表达范围较小的数据类型时,注意溢出;类型时,注意溢出;2.5.4 强制类型转换运算符ok其格式为:其格式为: () () /形式一形式一或或 ()/形式二形式二作用:作用:将表达式强制转换为将表达式强制转换为类型,类型, 但表达式的值及其类型不变。但表达式的值及其类型不变。任意数据类型任意数据类型 赋

温馨提示

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

评论

0/150

提交评论