数据类型与表达式.ppt

上传人:cl****1 文档编号:571302781 上传时间:2024-08-09 格式:PPT 页数:64 大小:2.38MB
返回 下载 相关 举报
数据类型与表达式.ppt_第1页
第1页 / 共64页
数据类型与表达式.ppt_第2页
第2页 / 共64页
数据类型与表达式.ppt_第3页
第3页 / 共64页
数据类型与表达式.ppt_第4页
第4页 / 共64页
数据类型与表达式.ppt_第5页
第5页 / 共64页
点击查看更多>>
资源描述

《数据类型与表达式.ppt》由会员分享,可在线阅读,更多相关《数据类型与表达式.ppt(64页珍藏版)》请在金锄头文库上搜索。

1、第二章 数据类型与表达式本章学习内容zz掌握各种基本数据类型的关键字、数据长度掌握各种基本数据类型的关键字、数据长度掌握各种基本数据类型的关键字、数据长度掌握各种基本数据类型的关键字、数据长度和表示范围;和表示范围;和表示范围;和表示范围;zz掌握各种类型的数值表示;掌握各种类型的数值表示;掌握各种类型的数值表示;掌握各种类型的数值表示; zz弄清变量以及变量赋值的实质、标识符的构弄清变量以及变量赋值的实质、标识符的构弄清变量以及变量赋值的实质、标识符的构弄清变量以及变量赋值的实质、标识符的构成规则;成规则;成规则;成规则; zz弄清常量与变量之间的区别;弄清常量与变量之间的区别;弄清常量与变

2、量之间的区别;弄清常量与变量之间的区别; zz掌握常用的运算符的含义、优先级和使用方掌握常用的运算符的含义、优先级和使用方掌握常用的运算符的含义、优先级和使用方掌握常用的运算符的含义、优先级和使用方法;法;法;法; zz掌握隐式和显式类型转换的概念和使用方式。掌握隐式和显式类型转换的概念和使用方式。掌握隐式和显式类型转换的概念和使用方式。掌握隐式和显式类型转换的概念和使用方式。本章目录q第二讲 C+的数据类型、常量与变量q第三讲 运算符与表达式q本章小结 结结结结 束束束束第二讲 C+的数据类型、常量与变量q一、C+的数据类型q二、变量和常量q练一练返回本章目录返回本章目录返回本章目录返回本章

3、目录一、C+的数据类型qq数据是程序处理的对象,数据是程序处理的对象,数据是程序处理的对象,数据是程序处理的对象,为了描述现实世界中不为了描述现实世界中不为了描述现实世界中不为了描述现实世界中不同特点的事物,同特点的事物,同特点的事物,同特点的事物,C+C+设设设设计了多种数据类型。计了多种数据类型。计了多种数据类型。计了多种数据类型。C+C+提供了多种数据类提供了多种数据类提供了多种数据类提供了多种数据类型用于表示和存储数据,型用于表示和存储数据,型用于表示和存储数据,型用于表示和存储数据,以满足程序处理的需要。以满足程序处理的需要。以满足程序处理的需要。以满足程序处理的需要。右图列出了右图

4、列出了右图列出了右图列出了C+C+的各种的各种的各种的各种数据类型。数据类型。数据类型。数据类型。返回本讲目录返回本讲目录返回本讲目录返回本讲目录1字符集qq字符集是构成字符集是构成字符集是构成字符集是构成C+C+程序语句的最小元素。程序语句的最小元素。程序语句的最小元素。程序语句的最小元素。C+C+程序语句(字符程序语句(字符程序语句(字符程序语句(字符串除外)只能由字符集中的字符构成。字符集中的字符都能由串除外)只能由字符集中的字符构成。字符集中的字符都能由串除外)只能由字符集中的字符构成。字符集中的字符都能由串除外)只能由字符集中的字符构成。字符集中的字符都能由键盘输入,字符集由下列各类

5、字符构成:键盘输入,字符集由下列各类字符构成:键盘输入,字符集由下列各类字符构成:键盘输入,字符集由下列各类字符构成: 数字:数字:数字:数字:0,1,2,3,4,5,6,7,8,90,1,2,3,4,5,6,7,8,9。 英文字母:英文字母:英文字母:英文字母:a az z,A AZ Z。 特殊字符:特殊字符:特殊字符:特殊字符: 空格空格空格空格 ! # % & * _(! # % & * _(下画线下画线下画线下画线) - + = | ) - + = | / “ ? , . ; () / “ ? , . ; () qq从字符集构成可看出,从字符集构成可看出,从字符集构成可看出,从字符集构

6、成可看出,C+C+字符集由除字符集由除字符集由除字符集由除符号外的所有能由键符号外的所有能由键符号外的所有能由键符号外的所有能由键盘输入的英文字符构成。这些字符组合起来使用,如作为标识盘输入的英文字符构成。这些字符组合起来使用,如作为标识盘输入的英文字符构成。这些字符组合起来使用,如作为标识盘输入的英文字符构成。这些字符组合起来使用,如作为标识符、数据;有的可单独使用,如符、数据;有的可单独使用,如符、数据;有的可单独使用,如符、数据;有的可单独使用,如+ +、- -、* *、/ /分别表示加、减、分别表示加、减、分别表示加、减、分别表示加、减、乘、除。乘、除。乘、除。乘、除。返回本讲目录返回

7、本讲目录返回本讲目录返回本讲目录2.标识符与关键字qq标识符是用来标识程序中的一些实体,是这些实体的名字,包标识符是用来标识程序中的一些实体,是这些实体的名字,包括函数名、变量名、类名、对象名等。日常生活中,人名就是括函数名、变量名、类名、对象名等。日常生活中,人名就是一个人的标识符。一个人的标识符。qq标识符的构成应遵循如下规则:标识符的构成应遵循如下规则: (1 1)由英文大、小写字母、下画线和数字组成。)由英文大、小写字母、下画线和数字组成。 (2 2)第一个字符必须为英文大、小写字母或下画线。)第一个字符必须为英文大、小写字母或下画线。 (3 3)英文大写字母与小写字母分别代表不同标识

8、符。)英文大写字母与小写字母分别代表不同标识符。 (4 4)不能是)不能是C+C+关键字。关键字。返回本讲目录返回本讲目录返回本讲目录返回本讲目录qqC+C+的关键字是的关键字是C+C+预定义的单词,也叫保留字。预定义的单词,也叫保留字。只能为只能为C+C+保留,不能用做标识符。当程序员将保留,不能用做标识符。当程序员将关键字作为标识符时,一般编译系统会警告。关键字作为标识符时,一般编译系统会警告。 qq在符合构成规则的前提下,如何来设定一个好在符合构成规则的前提下,如何来设定一个好的标识符呢?一般而言,标识符要有意义、简的标识符呢?一般而言,标识符要有意义、简洁、易区分,以便程序易读,编程时

9、不易犯错洁、易区分,以便程序易读,编程时不易犯错误。误。 返回本讲目录返回本讲目录返回本讲目录返回本讲目录3.基本数据类型qC+的数据类型大体分为五大类:整型(int)、实型(又称浮点型,float和double)、字符型(char)、布尔型(bool)和空值型(void)。其中,布尔型也称为逻辑型。 q表2-1列出了C+的基本数据类型。返回本讲目录返回本讲目录返回本讲目录返回本讲目录类类 型型 名名类类 型型 描描 述述字节字节 数数取取 值值 范范 围围bool布尔型布尔型1false,true(0,1)char字符型字符型1- -128127unsigned char无符号字符型无符号字

10、符型10255int整型整型4- -231231- -1signed int有符号整型有符号整型4- -231231- -1unsigned int无符号整型无符号整型40231- -1signed short int有符号短整型有符号短整型2- -215215- -1(- -32 76832 767)signed long int有符号长整型有符号长整型4- -231231- -1unsigned short int无符号短整型无符号短整型20216- -1(065 535)unsigned long int无符号长整型无符号长整型40232- -1float单精度浮点型单精度浮点型4+3.

11、4e+38double双精度浮点型双精度浮点型8+1.7e+308long double长双精度浮点型长双精度浮点型8+1.7e+4932void空值类型空值类型表表2-1 C+2-1 C+的基本数据类型的基本数据类型返回本讲目录返回本讲目录返回本讲目录返回本讲目录二、变量和常量【实例实例2-12-1】 阅读下面程序,注意观察程序的运行结果。阅读下面程序,注意观察程序的运行结果。 点击点击【实例实例2-12-1】 源程序源程序程序分析:程序分析: 这是一个已知圆的半径这是一个已知圆的半径r r,求圆的周长,求圆的周长l l与面积与面积s s的数学题。程的数学题。程序用序用doubledoubl

12、e定义了定义了3 3个双精度浮点型变量个双精度浮点型变量r r、l l、s s,令,令r r的初值的初值为为1 1,且根据圆的周长公式(,且根据圆的周长公式(2 2 r r)与面积公式()与面积公式( r r2 2)求出)求出l l和和s s的值。的值。 然后用输出流然后用输出流coutcout分别输出该圆的半径分别输出该圆的半径r r、周长、周长l l和面积和面积s s的值。的值。 因为输出时要进行换行,所以在输出流中使用转义字符因为输出时要进行换行,所以在输出流中使用转义字符nn进行换行。进行换行。程序运行结果如下:程序运行结果如下:返回本讲目录返回本讲目录返回本讲目录返回本讲目录4.变量

13、概述qq要区分变量名和变量值是两个不同的概念。例如,要区分变量名和变量值是两个不同的概念。例如,整型变量整型变量a a的值为的值为3 3,则该变量名为,则该变量名为a a,变量的值,变量的值为为3 3。 qq所谓变量,是指在程序运行过程中其值可以改变的量。所谓变量,是指在程序运行过程中其值可以改变的量。一个变量应该有名字(即变量名),有值(变量值),一个变量应该有名字(即变量名),有值(变量值),并在内存中占据一定的存储单元。并在内存中占据一定的存储单元。返回本讲目录返回本讲目录返回本讲目录返回本讲目录5.变量的定义与初始化qq变量定义的一般格式为:变量定义的一般格式为:数据类型数据类型数据类

14、型数据类型 变量名变量名变量名变量名1 1,变量名,变量名,变量名,变量名2 2,变量名,变量名,变量名,变量名n;n;qq在定义一个变量的同时,也可以用赋值运在定义一个变量的同时,也可以用赋值运算符给它赋以初值,称为算符给它赋以初值,称为变量初始化变量初始化变量初始化变量初始化。qq变量初始化的格式如下:变量初始化的格式如下:数据类型数据类型数据类型数据类型 变量名变量名变量名变量名1=1=初值初值初值初值1 , 1 , 变量名变量名变量名变量名2=2=初值初值初值初值2 , , 2 , , 变量名变量名变量名变量名n=n=初值初值初值初值n;n;qq“ “=”=”在在C+C+中不是数学中的

15、中不是数学中的“ “等于号等于号” ”,而是赋值号,它表示把,而是赋值号,它表示把“ “=”=”右边的数右边的数据存放在左边的变量表示的存储单元中。据存放在左边的变量表示的存储单元中。返回本讲目录返回本讲目录返回本讲目录返回本讲目录例如,在例如,在【实例实例2-12-1】中语句:中语句: double r=1,l,s; double r=1,l,s;表示定义了表示定义了3 3个个doubledouble型的变量,且将变量型的变量,且将变量r r赋初赋初值为值为1 1。在定义变量的同时赋初值还有一种方法,就是在在定义变量的同时赋初值还有一种方法,就是在变量后面将初值放在括号中,格式如下:变量后面

16、将初值放在括号中,格式如下:例如,例如,【实例实例2-12-1】的第的第6 6行赋初值语句也可改为:行赋初值语句也可改为:double r(1),l,s;double r(1),l,s;数据类型数据类型数据类型数据类型 变量名变量名变量名变量名1(1(初值初值初值初值1) , 1) , 变量名变量名变量名变量名2(2(初值初值初值初值2) , , 2) , , 变量名变量名变量名变量名n(n(初值初值初值初值n);n);返回本讲目录返回本讲目录返回本讲目录返回本讲目录6.常量q常量又称常数,是指在程序运行过程中其值不能改变的量。C+中的常量又分字面常量和符号常量。字面常量又称直接常量,就是常说

17、的常数。q与数据类型相对应,C+中的字面常量主要有整型常量整型常量、浮点型常量浮点型常量、字符常字符常量量、字符串常量字符串常量与布尔型常量布尔型常量。返回本讲目录返回本讲目录返回本讲目录返回本讲目录1 1)整型常量)整型常量 整型常量又称整数,在整型常量又称整数,在C+C+中,整数可以用三种数制来表示,中,整数可以用三种数制来表示,采用十进制、八进制和十六进制的表示形式,其方法是在数采用十进制、八进制和十六进制的表示形式,其方法是在数字前面加上进制字前面加上进制前缀前缀前缀前缀。各种进制的表示形式如下:。各种进制的表示形式如下:(1 1)十进制整数。十进制整常数没有前缀,其数字取值范围为)十

18、进制整数。十进制整常数没有前缀,其数字取值范围为0 09 9。例如:。例如:123123、-38-38、256256等。等。(2 2)八进制整数。八进制整常数必须以数字)八进制整数。八进制整常数必须以数字0 0开头,即以开头,即以0 0作为作为八进制数的前缀。数字取值范围为八进制数的前缀。数字取值范围为0 07 7。八进制数通常是无。八进制数通常是无符号数。例如:符号数。例如:023023、046046等。等。(3 3)十六进制整数。十六进制整常数的前缀为)十六进制整数。十六进制整常数的前缀为0X0X或或0x0x,其数字,其数字取值范围为取值范围为0 09 9、A AF F或或a af f。例

19、如:。例如:0X1C0X1C、0XFFFF0XFFFF等。等。(4 4)整型常数的后缀。如果使用的数值超过了基本整型数据的)整型常数的后缀。如果使用的数值超过了基本整型数据的取值范围,就必须用长整型数来表示。长整型数是用后缀取值范围,就必须用长整型数来表示。长整型数是用后缀“ “L”L”或或“ “l” l”来表示的。例如:来表示的。例如:158L158L、077L077L和和0XA5L0XA5L等。等。 无符号数也可用后缀表示,整型常数的无符号数的后缀为无符号数也可用后缀表示,整型常数的无符号数的后缀为“ “U”U”或或“ “u”u”。例如:。例如:358u358u,0x38Au0x38Au,

20、235Lu235Lu均为无符号数。均为无符号数。返回本讲目录返回本讲目录返回本讲目录返回本讲目录2 2)浮点型常量)浮点型常量浮点型常量也称为实数或者浮点数。在浮点型常量也称为实数或者浮点数。在C+C+中,实数只采用十中,实数只采用十进制。它有两种形式:进制。它有两种形式:十进制小数形式十进制小数形式十进制小数形式十进制小数形式和和指数形式指数形式指数形式指数形式。(1 1)十进制小数形式。由数字)十进制小数形式。由数字0 09 9和小数点(注意:必须有和小数点(注意:必须有小数点)组成,小数点前后如果有单独的小数点)组成,小数点前后如果有单独的0 0可以省略。如:可以省略。如:123.451

21、23.45、-256.7-256.7、0.00.0、.25.25、12.12.都是合法的小数。都是合法的小数。(2 2)指数形式。指数形式又称科学计数法。由十进制小数加)指数形式。指数形式又称科学计数法。由十进制小数加上阶码标志上阶码标志“ “e”e”或或“ “E”E”以及阶码(只能为整数,可以带以及阶码(只能为整数,可以带符号)组成。其一般形式为:符号)组成。其一般形式为:a E n返回本讲目录返回本讲目录返回本讲目录返回本讲目录q其中a为十进制数,n为十进制整数,其值为a10n。q指数形式的表示法有两点要求:e或E前、后必须有数字,e或E后的数字必须是整数。q 例如,合法的实数:1.5E3

22、、2.7E-6等。不合法的实数:E-3、2.7E等。返回本讲目录返回本讲目录返回本讲目录返回本讲目录3 3)字符型常量)字符型常量qq 字符型常量是用英文字符型常量是用英文单单单单引号括起来的引号括起来的一个一个一个一个字符,如:字符,如:AA,aa,+等。单引号只是字符与其他符号的分隔符,不是字符等。单引号只是字符与其他符号的分隔符,不是字符常量的一部分,当输出一个字符常量时不输出此单引号。常量的一部分,当输出一个字符常量时不输出此单引号。qq 每个字符变量被分配每个字符变量被分配1 1个字节的内存空间,因此只能存放一个字节的内存空间,因此只能存放一个字符。字符值是以个字符。字符值是以ASC

23、IIASCII码的形式存放在变量的内存单元码的形式存放在变量的内存单元之中的,所以也可以把它们看成整型量。有些之中的,所以也可以把它们看成整型量。有些ASCIIASCII码字符码字符如回车、换行、退格等不能直接在单引号中引用,这些数如回车、换行、退格等不能直接在单引号中引用,这些数据可用转义序列来表示。所谓的转义序列是以称为转义符据可用转义序列来表示。所谓的转义序列是以称为转义符的反斜杠的反斜杠“ “” ”开头的字符或数字序列。开头的字符或数字序列。返回本讲目录返回本讲目录返回本讲目录返回本讲目录q转义字符有两种表式方法:q其中字符助记符为一个字母,字符的ASCII码值为ooo与xhh,其中o

24、oo表示为3位八进制数,xhh表示为2位十六进制数 字符助记符字符助记符字符助记符字符助记符 或或或或 字符的字符的字符的字符的ASCIIASCII码值码值码值码值返回本讲目录返回本讲目录返回本讲目录返回本讲目录4 4)字符串常量)字符串常量)字符串常量)字符串常量 字符串常量简称字符串,是使用一对双引号括起字符串常量简称字符串,是使用一对双引号括起字符串常量简称字符串,是使用一对双引号括起字符串常量简称字符串,是使用一对双引号括起来的字符序列。从该字符串可以看出,转义序列来的字符序列。从该字符串可以看出,转义序列来的字符序列。从该字符串可以看出,转义序列来的字符序列。从该字符串可以看出,转义

25、序列可以用在字符串中。可以用在字符串中。可以用在字符串中。可以用在字符串中。 字符串与字符比较有如下区别:字符串与字符比较有如下区别:字符串与字符比较有如下区别:字符串与字符比较有如下区别:(1 1)字符由单引号括起来,字符串由双引号括起来。)字符由单引号括起来,字符串由双引号括起来。)字符由单引号括起来,字符串由双引号括起来。)字符由单引号括起来,字符串由双引号括起来。(2 2)字符只能是单个字符,字符串可以是零个或多)字符只能是单个字符,字符串可以是零个或多)字符只能是单个字符,字符串可以是零个或多)字符只能是单个字符,字符串可以是零个或多个字符个字符个字符个字符(3 3)字符占)字符占)

26、字符占)字符占1 1个字节的内存空间,字符串占内存字个字节的内存空间,字符串占内存字个字节的内存空间,字符串占内存字个字节的内存空间,字符串占内存字节数等于字符串长度加节数等于字符串长度加节数等于字符串长度加节数等于字符串长度加1 1。系统自动在字符串末。系统自动在字符串末。系统自动在字符串末。系统自动在字符串末尾添加尾添加尾添加尾添加00作为结束标记作为结束标记作为结束标记作为结束标记返回本讲目录返回本讲目录返回本讲目录返回本讲目录qq例如:字符串例如:字符串 “ “Hello,boyHello,boy!”!”在内存中所占的字节在内存中所占的字节形式如下,该字符串的长度为形式如下,该字符串的

27、长度为1010,所占的内存,所占的内存空间字节数为空间字节数为1111。5 5)布尔型常量)布尔型常量布尔型常量只有两个:布尔型常量只有两个:truetrue与与falsefalse。它主要用于表。它主要用于表达式的计算结果。在达式的计算结果。在C+C+的算术运算式中,把的算术运算式中,把布尔型数据当做整型数据,布尔型数据当做整型数据,truetrue与与falsefalse分别当分别当做做1 1与与0 0。在逻辑运算中则把非。在逻辑运算中则把非0 0的数据当做的数据当做truetrue,把,把0 0当成当成falsefalse。返回本讲目录返回本讲目录返回本讲目录返回本讲目录Hello,bo

28、y!07.符号常量q当程序中多次出现同一个常数时就可以把具体的数值符号化。一个符号化的数值称为符符号常量号常量,也就是我们常说的有名字的常量。qC+符号常量的定义形式:#define #define 符号常量名符号常量名符号常量名符号常量名 数值数值数值数值点击打开使用符号常量的点击打开使用符号常量的【实例实例2-12-1】源程序源程序x2_1_2.cppx2_1_2.cpp本程序的运行结果同【实例2-1】。返回本讲目录返回本讲目录返回本讲目录返回本讲目录符号常量的特点是:符号常量的特点是: 习惯上符号常量的标识符用大写字母,变量标习惯上符号常量的标识符用大写字母,变量标识符用小写字母,以示区

29、别;识符用小写字母,以示区别; 符号常量与变量不同,它的值在其作用域内不符号常量与变量不同,它的值在其作用域内不能改变,也不能再被赋值。能改变,也不能再被赋值。使用符号常量的好处是:含义清楚,并且能做到使用符号常量的好处是:含义清楚,并且能做到“ “一改全改一改全改” ”。例如,下面的语句是错误的:例如,下面的语句是错误的: #define PI=3.14; /#define PI=3.14; /不能使用赋值运算符不能使用赋值运算符“ “=”=”,且命令结尾不能加分号且命令结尾不能加分号返回本讲目录返回本讲目录返回本讲目录返回本讲目录8.常变量q其中,const可以与数据类型说明位置互换。对比

30、变量的定义格式,发现就是在变量初始定义的基础上加上了const修饰。const的意思是“常,不可改变”的意思。用const修饰后,变量的值就不可改变了,因此这一种形式又称常变量。constconst 数据类型数据类型数据类型数据类型 符号常量名符号常量名符号常量名符号常量名= =数值数值数值数值; ;qqC+C+为符号常量还提供了一种新的方法,格式如为符号常量还提供了一种新的方法,格式如下:下: 返回本讲目录返回本讲目录返回本讲目录返回本讲目录所以【实例2-1】又可改为下面这种形式: 点击查看使用常变量的【实例2-1】源程序x2_1_3.cpp本程序的运行结果同【实例2-1】。 需要注意的是,

31、下面的这两种形式是错误的: const double PI; /错误,定义时没有给出初值 PI=3.14159; /错误,常量不能被改变返回本讲目录返回本讲目录返回本讲目录返回本讲目录同符号常量相比,常变量有如下好处:同符号常量相比,常变量有如下好处:(1 1)常变量与变量定义相似,可使程序保持良好风格;)常变量与变量定义相似,可使程序保持良好风格;(2 2)常变量可以按不同的需要选择合适的数据类型,节省内存)常变量可以按不同的需要选择合适的数据类型,节省内存空间,在运算式中有明确的类型。空间,在运算式中有明确的类型。 因此,在因此,在C+C+程序中,一般使用常变量而不使用符号常量。程序中,一

32、般使用常变量而不使用符号常量。虽然文字常量、符号常量、常变量统称为常量,但前两者与虽然文字常量、符号常量、常变量统称为常量,但前两者与常变量有着本质的差别。文字常量与符号常量代表的数值在常变量有着本质的差别。文字常量与符号常量代表的数值在程序的指令中不占数据空间,而常变量的值与其他变量一样,程序的指令中不占数据空间,而常变量的值与其他变量一样,保存在专门的内存空间中。保存在专门的内存空间中。返回本讲目录返回本讲目录返回本讲目录返回本讲目录练一练【练习2-1】 设有一个半径值为2的圆,求出该半径所在圆的周长、面积与所在球体的体积,并按照一定格式输出(p值用常变量定义)。解:(1)程序分析如下:

33、在这里首先要了解圆的周长、面积与体积的数学公式,以及注意输出的格式,另外涉及到圆周率作为一个常量如何应用。 返回本讲目录返回本讲目录返回本讲目录返回本讲目录 定义圆的周半径并赋初值,定义圆的周长、面积和体积变量; 将圆周率作为常变量进行定义; 计算并按一定格式显示结果。 点击【练习2-1】源程序运行结果如下:返回本讲目录返回本讲目录返回本讲目录返回本讲目录第三讲 运算符与表达式一、算术、关系、逻辑及赋值运算符及其表达式二、其它运算符三、类型转换练一练返回本章目录返回本章目录返回本章目录返回本章目录一、算术、关系、逻辑及赋值运算符及其表达式【实例实例2-22-2】 阅读程序,分析并写出程序运行结

34、果。阅读程序,分析并写出程序运行结果。 点击打开点击打开【实例实例2-22-2】 源程序程序分析: 这这个个程程序序主主要要就就是是考考查查算算术术运运算算、关关系系运运算算、逻逻辑辑运运算算和和复复合合的的赋赋值值运运算算。要要弄弄清清这这些些问问题题,我我们们就就要要搞搞清清楚楚C+中的各类运算的规则。返回本讲目录返回本讲目录返回本讲目录返回本讲目录q程序运行结果如下:1.算术运算符qq算术运算符是算术运算符是C+C+中最常用的一种运算符中最常用的一种运算符 ,基本算术运算,基本算术运算符如下表所示。说明:表中优先级数字越小,优先级越高,符如下表所示。说明:表中优先级数字越小,优先级越高,

35、同级的按结合性顺序,多数自左向右运算。正号与负号为同级的按结合性顺序,多数自左向右运算。正号与负号为一元目运算符,其余均为二元目运算符。一元目运算符,其余均为二元目运算符。优优 先先 级级运运 算算 符符含含 义义结结 合合 性性2+正号正号从右向左从右向左- -负号负号4*乘乘从左向右从左向右/除除%取余取余5+加加- -减减返回本讲目录返回本讲目录返回本讲目录返回本讲目录(1 1)算术运算符的意义与数学中相应符号的意义是)算术运算符的意义与数学中相应符号的意义是一致的,它们之间的相对优先级关系与数学中也一致的,它们之间的相对优先级关系与数学中也是一致的。是一致的。(2 2)“ “%”%”运

36、算符也被称为取余运算符,要求它的两运算符也被称为取余运算符,要求它的两个操作数的值必须是整数或字符型数。它是前一个操作数的值必须是整数或字符型数。它是前一个操作数被后一个操作数除的余数。当两个操作个操作数被后一个操作数除的余数。当两个操作数都是正数时,结果为正,如果一个(或两个)数都是正数时,结果为正,如果一个(或两个)操作数为负数时,余数的符号取决于机器,因此,操作数为负数时,余数的符号取决于机器,因此,移植性无法保证。移植性无法保证。返回本讲目录返回本讲目录返回本讲目录返回本讲目录(3 3)当)当“ “/” /”运算符用两个整数相除时,如果商运算符用两个整数相除时,如果商含有小数部分,将被

37、截掉。因此,如果要进行含有小数部分,将被截掉。因此,如果要进行通常意义的除运算,则至少应保证除数或被除通常意义的除运算,则至少应保证除数或被除数中有一个是浮点数或双精度数。数中有一个是浮点数或双精度数。(4 4)在使用算术运算符时,需要注意有关算术)在使用算术运算符时,需要注意有关算术表达式求值溢出的处理问题。在做除法运算时表达式求值溢出的处理问题。在做除法运算时若除数为零或实数的运算结果溢出,系统会认若除数为零或实数的运算结果溢出,系统会认为是一个严重的错误而终止程序的运行并进行为是一个严重的错误而终止程序的运行并进行提示,而整数运算产生溢出时则不认为是一个提示,而整数运算产生溢出时则不认为

38、是一个错误,但这时运行结果已不正确了,所以对整错误,但这时运行结果已不正确了,所以对整数溢出的处理是程序设计者要注意的问题。数溢出的处理是程序设计者要注意的问题。2.关系运算符qq在解决许多问题时都要进行情况判断,在解决许多问题时都要进行情况判断,C+C+提供了关系运算符提供了关系运算符用于比较运算符两边的值。比较后返回的结果为用于比较运算符两边的值。比较后返回的结果为boolbool值值truetrue或或falsefalse(0 0或或1 1)。若关系运算符的计算结果继续用在表达式中,)。若关系运算符的计算结果继续用在表达式中,truetrue与与falsefalse分别当成了分别当成了1

39、 1与与0 0。关系运算符都是二元目运算符。关系。关系运算符都是二元目运算符。关系运算符如下表所示。运算符如下表所示。优优 先先 级级运运 算算 符符含含 义义结结 合合 性性7大于大于从左向右从左向右=大于等于大于等于=小于等于小于等于8=等于等于!=不等于不等于返回本讲目录返回本讲目录返回本讲目录返回本讲目录3.逻辑运算符qq逻辑运算符实现逻辑运算,用于复杂的逻辑判断,一般以关逻辑运算符实现逻辑运算,用于复杂的逻辑判断,一般以关系运算的结果作为操作数,操作数类型为系运算的结果作为操作数,操作数类型为boolbool型,返回类型型,返回类型亦为亦为boolbool型。在逻辑运算中,非零的数据

40、被当做真(型。在逻辑运算中,非零的数据被当做真(1 1)。左)。左边的表是逻辑运算符表,右边的是逻辑运算符的功能表边的表是逻辑运算符表,右边的是逻辑运算符的功能表优优 先先 级级运运 算算 符符含义含义结结 合合 性性2!取反取反从右向左从右向左12&与与从左向右从左向右13|或或pq!pp&qp|q001000101100011111返回本讲目录返回本讲目录返回本讲目录返回本讲目录qq逻辑运算符的操作数为逻辑运算符的操作数为boolbool型数据,当为其他数据类型数据,当为其他数据类型时,将它转换成型时,将它转换成boolbool值参加运算。设值参加运算。设a=10a=10,b=5b=5,c

41、=-3c=-3,则可得:,则可得:!a!a的值为的值为0 0;a&ba&b的值为的值为1 1;a|ba|b的值的值为为1 1。qq例如,例如,【实例实例2-22-2】的第的第1515行语句:行语句: coutcoutb&ab&ac=c=b&ab&ac)c) 的优先级别高于的优先级别高于&,所以表达式所以表达式aab&ab&acc应先计算应先计算abab和和acac的值,分别的值,分别为假(为假(0 0)和真()和真(1 1)。然后这两个值再做)。然后这两个值再做&运算,运算,0&10&1的结果为的结果为0 0。返回本讲目录返回本讲目录返回本讲目录返回本讲目录4.赋值运算符qq赋值运算符的功能是

42、赋值运算符的功能是“ “赋给变量值赋给变量值” ”,除了在,除了在定义变量时给变量赋初值外,通常还用于改变定义变量时给变量赋初值外,通常还用于改变变量的值。各赋值运算符及其功能如表变量的值。各赋值运算符及其功能如表2-7所示。返回本讲目录返回本讲目录返回本讲目录返回本讲目录优优 先先 级级运运 算算 符符含含 义义结结 合合 性性15=从右向左从右向左*=a*=b等价于等价于a=a*b/=a/=b等价于等价于a=a/b%=a%=b等价于等价于a=a%b+=a+=b等价于等价于a=a+b-=a-=b等价于等价于a=a-b=a=b等价于等价于a=a=a=b等价于等价于a=ab&=a&=b等价于等价

43、于a=a&b=a=b等价于等价于a=ab|=a|=b等价于等价于a=a|b返回本讲目录返回本讲目录返回本讲目录返回本讲目录表表2-7 2-7 赋值运算符赋值运算符qqC+C+提供的赋值运算符分为两种:简单的赋值运算提供的赋值运算符分为两种:简单的赋值运算符和复合赋值运算符,它们都是双目运算符。符和复合赋值运算符,它们都是双目运算符。qq简单的赋值运算符的使用格式如下:简单的赋值运算符的使用格式如下:变量名变量名变量名变量名 = = 表达式表达式表达式表达式; ;qq其功能是将右边表达式(右操作数)的值放到左边其功能是将右边表达式(右操作数)的值放到左边变量的内存单元中。变量的内存单元中。qq复

44、合赋值运算符的使用格式如下:复合赋值运算符的使用格式如下:变量名变量名变量名变量名 = = 表达式表达式表达式表达式; ;qq运算过程为先将变量名与表达式做规定的运算过程为先将变量名与表达式做规定的运算,运算,然后将运算的结果赋给左边变量名。注意右边的表然后将运算的结果赋给左边变量名。注意右边的表达式必须先计算出结果,再与变量进行达式必须先计算出结果,再与变量进行运算。运算。 返回本讲目录返回本讲目录返回本讲目录返回本讲目录二、其它运算符【实例实例2-32-3】 阅读下面程序,分析并写出其运行阅读下面程序,分析并写出其运行结果。结果。 点击打开点击打开【实例实例2-32-3】 源程序源程序程序

45、分析:程序分析:qq已知已知i=3i=3,j=4j=4,则语句:,则语句:-i; +j;-i; +j;功能是将变功能是将变量量i i自减自减1 1和和j j自增自增1 1,所以,所以i=i-1=2i=i-1=2,j=j+1=5j=j+1=5。同。同理,语句:理,语句:i-; j+;i-; j+;也是此功能(即也是此功能(即+、- -符符号在单独变量的语句中在变量前后效果一样),号在单独变量的语句中在变量前后效果一样),所以得所以得i=i-1=1i=i-1=1,j=j+1=6j=j+1=6。返回本讲目录返回本讲目录返回本讲目录返回本讲目录qq自增(自增(+)、自减()、自减(- -)符号在表达式

46、中时,要看是在变量前)符号在表达式中时,要看是在变量前还是变量后,如果自增、减符号在变量后,则先参与表达式计还是变量后,如果自增、减符号在变量后,则先参与表达式计算,然后变量再自增、减。如果自增、减符号在变量前,则先算,然后变量再自增、减。如果自增、减符号在变量前,则先对变量进行自增、减,然后再将变量参与整个表达式运算。所对变量进行自增、减,然后再将变量参与整个表达式运算。所以语句:以语句:k=k=i-ji-j+;+;相当于相当于k=(k=(i-)-(ji-)-(j+);+);,因为自增、自减符号,因为自增、自减符号都在变量后面,所以,相当于先计算都在变量后面,所以,相当于先计算k=k=i-j

47、i-j; ;,所以,所以k=1-6=-5k=1-6=-5。然。然后再计算后再计算i-i-和和j+j+,所以,所以i=1-1=0i=1-1=0,j=6+1=7j=6+1=7。qq同理,语句:同理,语句:k=-k=-i-+ji-+j; ;相当于相当于k=(-i) - (+j);k=(-i) - (+j);,因为自增、自减,因为自增、自减符号都在变量前面,所以,相当于先计算自增、自减,即符号都在变量前面,所以,相当于先计算自增、自减,即i=0-i=0-1=-11=-1和和 j=7+1=8j=7+1=8,然后再计算整个表达式,然后再计算整个表达式k=k=i-ji-j; ;,所以,所以k=-1-8=-9

48、k=-1-8=-9。qq又已知:又已知:m=10m=10,n=20n=20,所以语句:,所以语句:p=(mp=(mn)?m+n:m-nn)?m+n:m-n; ;右侧为右侧为条件表达式,因为条件表达式,因为mnmn(10201020)成立,所以用第二个表达式)成立,所以用第二个表达式m+nm+n(10+20=3010+20=30)来作为整个条件表达式的结果,再赋给右边)来作为整个条件表达式的结果,再赋给右边的变量的变量p p,所以,所以p p的值为的值为3030。qq因为因为sizeofsizeof运算符可以求某类型数据所占内存字符数,所以运算符可以求某类型数据所占内存字符数,所以sizeof(

49、intsizeof(int)=4)=4,sizeof(msizeof(m)=4)=4(因为(因为mm为整型变量),为整型变量),sizeof(10)=4sizeof(10)=4(因为(因为1010为整数,在内存中也占为整数,在内存中也占4 4个字节),个字节),sizeof(doublesizeof(double)=8)=8。返回本讲目录返回本讲目录返回本讲目录返回本讲目录q程序运行结果如下返回本讲目录返回本讲目录返回本讲目录返回本讲目录5.+、-运算符qq+(自增)、(自增)、- -(自减)运算符是(自减)运算符是C+C+中使用方便且效率很中使用方便且效率很高的两个运算符,它们都是单目运算符

50、。这两个运算符有高的两个运算符,它们都是单目运算符。这两个运算符有前置和后置两种形式。前置就是指运算符在操作数的前面,前置和后置两种形式。前置就是指运算符在操作数的前面,后置就是指运算符在操作数的后面。自增、自减运算符如后置就是指运算符在操作数的后面。自增、自减运算符如下表所示。下表所示。优优 先先 级级运运 算算 符符含含 义义结结 合合 性性1+后置自增后置自增从左向右从左向右-后置自减后置自减2+前置自增前置自增从右向左从右向左-前置自减前置自减返回本讲目录返回本讲目录返回本讲目录返回本讲目录qq无论是前置还是后置,这两个运算符的作用都是使操无论是前置还是后置,这两个运算符的作用都是使操

51、作数的值增作数的值增1 1或减或减1 1,但对由操作数和由运算符所组成,但对由操作数和由运算符所组成的表达式则影响却完全不同。的表达式则影响却完全不同。运算规则如下:运算规则如下: 若只对某变量自增(自减)而不参与其他赋值运算,若只对某变量自增(自减)而不参与其他赋值运算,若只对某变量自增(自减)而不参与其他赋值运算,若只对某变量自增(自减)而不参与其他赋值运算,结果都是该变量本身自增(自减)结果都是该变量本身自增(自减)结果都是该变量本身自增(自减)结果都是该变量本身自增(自减)1 1。 若某变量自增(自减)的同时还要参加其他运算,则若某变量自增(自减)的同时还要参加其他运算,则若某变量自增

52、(自减)的同时还要参加其他运算,则若某变量自增(自减)的同时还要参加其他运算,则前缀运算是自变量先自增(减)后再参与表达式运算,前缀运算是自变量先自增(减)后再参与表达式运算,前缀运算是自变量先自增(减)后再参与表达式运算,前缀运算是自变量先自增(减)后再参与表达式运算,后缀运算是自变量先参与表达式运算后再自增(减)。后缀运算是自变量先参与表达式运算后再自增(减)。后缀运算是自变量先参与表达式运算后再自增(减)。后缀运算是自变量先参与表达式运算后再自增(减)。返回本讲目录返回本讲目录返回本讲目录返回本讲目录例如,已知此时例如,已知此时i=1i=1,j=6j=6,【实例实例2-32-3】的第的第

53、1212行代码:行代码: k= k=i-ji-j+;+;表达式可写成:表达式可写成:k=(k=(i-)-(ji-)-(j+);+);因为是后置自增自减运算符,因为是后置自增自减运算符,特点就是先参与运算,后自增(减),所以相当于计算特点就是先参与运算,后自增(减),所以相当于计算k=1-6=-5k=1-6=-5,表达式运算结束。然后变量,表达式运算结束。然后变量i i再自减再自减1 1,j j再自再自增增1 1,最后,最后i i与与j j的值为的值为0 0与与7 7。同样分析同样分析【实例实例2-32-3】的第的第1414行代码:行代码: k=- k=-i-+ji-+j; ;与第与第1212行

54、代码所不同的是,这时自增、自减运算符为前置,行代码所不同的是,这时自增、自减运算符为前置,特点是先自增(减),后参与运算。特点是先自增(减),后参与运算。由于由于+、- -运算符内含了赋值运算,所以运算对象只能赋值,运算符内含了赋值运算,所以运算对象只能赋值,不能作用于常量和表达式。不能作用于常量和表达式。例如,下面语句是错误的:例如,下面语句是错误的:5+;5+;/ /不合法,不合法,+、- -不能用于常量不能用于常量( (x+yx+y)-)-/ /不合法,不合法,+、- -不能用于表达式不能用于表达式返回本讲目录返回本讲目录返回本讲目录返回本讲目录6条件运算符qq条件运算符是条件运算符是C

55、+C+中唯一的一个三目运算符,因此,中唯一的一个三目运算符,因此,条件运算符也称三目运算符。它能够实现简单的选择条件运算符也称三目运算符。它能够实现简单的选择功能,类似于条件语句,故称为条件运算符。条件运功能,类似于条件语句,故称为条件运算符。条件运算符的优先级为算符的优先级为1414,结合性按从右向左,格式如下:,结合性按从右向左,格式如下:表达式表达式表达式表达式1 ? 1 ? 表达式表达式表达式表达式2 : 2 : 表达式表达式表达式表达式3 3 返回本讲目录返回本讲目录返回本讲目录返回本讲目录该运算符的功能是先计算表达式该运算符的功能是先计算表达式1 1,如果表达式,如果表达式1 1的

56、值为的值为truetrue(非(非0 0),返回表达式),返回表达式2 2的值作为整个条件运算表的值作为整个条件运算表达式的值;如果表达式达式的值;如果表达式1 1的值为的值为falsefalse(0 0),返回表达),返回表达式式3 3的值作为整个条件运算表达式的值。例如,已知:的值作为整个条件运算表达式的值。例如,已知:m=10m=10,n=20n=20,【实例实例2-32-3】的第的第1717行语句:行语句:p=(mp=(mn)?m+n:m-nn)?m+n:m-n; ;先判断表达式先判断表达式1“mn”1“mn”成立,所以表达式成立,所以表达式1 1的值为的值为truetrue,因,因此

57、返回表达式此返回表达式2“m+n”2“m+n”的值的值10+20=3010+20=30作为整个条件运作为整个条件运算表达式的值,所以最后算表达式的值,所以最后p p的值为的值为3030。返回本讲目录返回本讲目录返回本讲目录返回本讲目录7逗号运算符qq逗号运算符可作为分隔符使用,将若干变量隔开,如逗号运算符可作为分隔符使用,将若干变量隔开,如定义多个变量时的定义语句定义多个变量时的定义语句intint x,y,zx,y,z; ;中各变量之间的中各变量之间的分隔符;也可做运算符使用,称做逗号运算符,用于分隔符;也可做运算符使用,称做逗号运算符,用于将若干独立的表达式隔开。其语法格式如下:将若干独立

58、的表达式隔开。其语法格式如下: 表达式表达式表达式表达式1, 1, 表达式表达式表达式表达式2 , , 2 , , 表达式表达式表达式表达式n nqq使用逗号运算符可以将多个表达式组成为一个表达式,使用逗号运算符可以将多个表达式组成为一个表达式,逗号表达式的求解过程为先求表达式逗号表达式的求解过程为先求表达式1 1,再求表达式,再求表达式2 2,依次类推,最后求表达式,依次类推,最后求表达式n n的值,并且将表达式的值,并且将表达式n n的的值作为整个逗号表达式的结果,它的类型也就是最后值作为整个逗号表达式的结果,它的类型也就是最后一个表达式的类型。在一个表达式的类型。在C+C+程序中,逗号运

59、算符常用程序中,逗号运算符常用来将多个赋值表达式连成一个逗号表达式。来将多个赋值表达式连成一个逗号表达式。返回本讲目录返回本讲目录返回本讲目录返回本讲目录qq例如,已知例如,已知m=10m=10,n=20n=20,【实例实例2-32-3】的第的第1919行语句:行语句:p=(p=(m+,n+,m+nm+,n+,m+n); );先执行表达式先执行表达式1“m+”1“m+”,得到,得到mm的值为的值为1111,再执行表达,再执行表达式式2“n+”2“n+”,得到,得到n n值为值为2121,最后执行表达式,最后执行表达式3“m+n”3“m+n”,得到得到m+nm+n的值为的值为3232,3232就

60、是最后运算表达式的返回值,就是最后运算表达式的返回值,并将并将3232赋值给变量赋值给变量p p,故最终,故最终p p的值为的值为3232。qq注意,如果在这条语句中把括号去掉,变成如下形式:注意,如果在这条语句中把括号去掉,变成如下形式:p=p=m+,n+,m+nm+,n+,m+n; ;最后最后p p的值应为的值应为1111。原因是逗号运算符的优先级为。原因是逗号运算符的优先级为1616,而赋值运算符的优先级为,而赋值运算符的优先级为1616,故运算顺序产生了变,故运算顺序产生了变化,先计算表达式化,先计算表达式p=m+p=m+,得到,得到p p值为值为1111,然后再计,然后再计算后两个表

61、达式的值,导致结果的改变。算后两个表达式的值,导致结果的改变。 返回本讲目录返回本讲目录返回本讲目录返回本讲目录8sizeof运算符qqsizeofsizeof运算符用来求得某种类型或某个变量所占字节数运算符用来求得某种类型或某个变量所占字节数(长度)。它是一个单目运算符,优先级为(长度)。它是一个单目运算符,优先级为2 2,结合,结合性按从右向左,用在类型说明符或变量名的左边,该性按从右向左,用在类型说明符或变量名的左边,该运算符的使用格式如下:运算符的使用格式如下:sizeofsizeof ( ( 类型说明符类型说明符类型说明符类型说明符 | | 变量名变量名变量名变量名 | | 常量常量

62、常量常量 ) ) 例如,例如,【实例实例2-32-3】的第的第2222行语句:行语句:coutcoutsizeof(doublesizeof(double)endlendl; ;使用使用sizeof(msizeof(m) )将获得变量将获得变量mm在机器内存中所占的字节在机器内存中所占的字节数。所以数。所以sizeof(doublesizeof(double) )则表示则表示doubledouble型数据在内存中型数据在内存中的长度,双精度的长度为的长度,双精度的长度为8 8,所以结果为,所以结果为8 8。返回本讲目录返回本讲目录返回本讲目录返回本讲目录9括号运算符qq括号运算符是用来改变原来

63、的优先级的,括号括号运算符是用来改变原来的优先级的,括号运算符的优先级最高为运算符的优先级最高为1 1,结合性按从左向右。,结合性按从左向右。括号运算符可以包含使用(即嵌套),即在括括号运算符可以包含使用(即嵌套),即在括号内还可以使用括号,在出现多重括号时,应号内还可以使用括号,在出现多重括号时,应该先作最内层的括号,按从里到外的顺序进行。该先作最内层的括号,按从里到外的顺序进行。在实际编程中,经常使用括号来改变优先级,在实际编程中,经常使用括号来改变优先级,即在某些表达式中要求先作优先级低的运算,即在某些表达式中要求先作优先级低的运算,这时就可以用括号来改变优先级。这时就可以用括号来改变优

64、先级。返回本讲目录返回本讲目录返回本讲目录返回本讲目录10位运算符qqC+C+中保留了低级语言中的二进制位运算符,以提高中保留了低级语言中的二进制位运算符,以提高计算的灵活性与效率。位运算分为移位运算与按位逻计算的灵活性与效率。位运算分为移位运算与按位逻辑运算。位运算符如下表所示。辑运算。位运算符如下表所示。qq位运算符是对其操作数按二进制形式逐步地进行逻辑位运算符是对其操作数按二进制形式逐步地进行逻辑运算或移位运操作的,运算对象为运算或移位运操作的,运算对象为boolbool、charchar、shortshort、intint等类型数据,但不能是浮点型数据。等类型数据,但不能是浮点型数据。

65、优优 先先 级级运运 算算 符符含含 义义结结 合合 性性2按位求反按位求反从右向左从右向左6按位右移按位右移9&按位与按位与10按位异或按位异或11|按位或按位或返回本讲目录返回本讲目录返回本讲目录返回本讲目录qq【实例实例2-42-4】 阅读下面程序,分析并写出程序运行结阅读下面程序,分析并写出程序运行结果。果。qq点击打开点击打开【实例实例2-42-4】 源程序源程序qq程序分析:程序分析:本程序有两个初始变量:本程序有两个初始变量:unsigned char a=137 , b=42;unsigned char a=137 , b=42;对对a a与与b b进行赋初值,分别为进行赋初值

66、,分别为137137与与4242,他们的二进制,他们的二进制表示分别为表示分别为1000100110001001和和0010101000101010。(1 1)运算符)运算符“ “&”&”将两个操作数对应位逐一地进行逻辑将两个操作数对应位逐一地进行逻辑与运算。例如:与运算。例如:a&ba&b,结果为,结果为8 8(二进制结果为(二进制结果为0000100000001000)。)。(2 2)运算符)运算符“ “|” |”将两个操作数对应位逐一地进行逻辑将两个操作数对应位逐一地进行逻辑或运算。例如:或运算。例如:a|ba|b,结果为,结果为171171(二进制结果为(二进制结果为101010111

67、0101011)。)。返回本讲目录返回本讲目录返回本讲目录返回本讲目录(3 3)运算符)运算符“ “”将两个操作数对应位逐一地进行逻辑将两个操作数对应位逐一地进行逻辑异或运算。逻辑异或运算的规则是异或运算。逻辑异或运算的规则是“ “同则同则0 0,异则,异则1”1”,即两个数只要不同,其逻辑异或的结果就为,即两个数只要不同,其逻辑异或的结果就为1 1,相,相同就为同就为0 0。例如:。例如:abab,结果为,结果为163163(二进制结果为(二进制结果为1010001110100011)。)。(4 4)运算符)运算符“ “”将原来二进制为将原来二进制为1 1的位变为的位变为0 0,原来为,原来

68、为0 0的位变为的位变为1 1。例如:。例如:aa,结果为,结果为118118(二进制结果为(二进制结果为0111011001110110)。)。(5 5)运算符)运算符“ “”将左操作数向左移动其右操作数所指将左操作数向左移动其右操作数所指定的位数,移出的位以定的位数,移出的位以0 0补齐。例如,表达式补齐。例如,表达式a1a1的的结果为结果为1818(二进制结果为(二进制结果为0001001000010010),而表达式),而表达式a2a”将左操作数向右移动其右操作数所指将左操作数向右移动其右操作数所指定的位数,移出的位以定的位数,移出的位以0 0补齐。例如,补齐。例如,a1a1,结果为,

69、结果为6868(二进制结果为(二进制结果为0100010001000100),),a2a2,结果为,结果为3434(二(二进制结果为进制结果为0010001000100010)。)。(7 7)因为正常用)因为正常用coutcout输出一个表达式时,结果为该变量输出一个表达式时,结果为该变量默认类型(本例中为无符号字符型),所以我们要用默认类型(本例中为无符号字符型),所以我们要用强制类型转换将该表达式变成无符号短整型时结果才强制类型转换将该表达式变成无符号短整型时结果才能输出数据的正确结果。能输出数据的正确结果。程序运行结果如下:程序运行结果如下:返回本讲目录返回本讲目录返回本讲目录返回本讲目

70、录三、类型转换qqC+C+允许在一个表达式中参与运算的操作数的允许在一个表达式中参与运算的操作数的数据类型不一致,也就是说数据类型不一致,也就是说C+C+支持不同数据支持不同数据类型的数据之间的混合运算。在对这样的表达类型的数据之间的混合运算。在对这样的表达式求值时,式求值时,C+C+需要对其中的一些操作数进行需要对其中的一些操作数进行类型转换。表达式中的类型转换有两种方式:类型转换。表达式中的类型转换有两种方式:自动类型转换与强制类型转换。自动类型转换自动类型转换与强制类型转换。自动类型转换一般只发生在算术表达式的运算中,因此在一般只发生在算术表达式的运算中,因此在C+C+中大部分的类型转换

71、均为强制类型转换。中大部分的类型转换均为强制类型转换。返回本讲目录返回本讲目录返回本讲目录返回本讲目录11自动类型转换qq自动类型转换也叫隐式类型转换。一般地,双目运算中自动类型转换也叫隐式类型转换。一般地,双目运算中的算术运算符、关系运算符、逻辑运算符和位运算符组的算术运算符、关系运算符、逻辑运算符和位运算符组成的表达式,要求两个操作数的类型一致,如果操作数成的表达式,要求两个操作数的类型一致,如果操作数类型不一致,则转换为高的类型,自动类型转换的顺序类型不一致,则转换为高的类型,自动类型转换的顺序可参照下图。可参照下图。返回本讲目录返回本讲目录返回本讲目录返回本讲目录qq关于自动类型转换的

72、几点说明:关于自动类型转换的几点说明:(1 1)自动转换发生在不同类型混合运算时,由编译系统)自动转换发生在不同类型混合运算时,由编译系统自动完成。若参与运算的类型不同,则如图自动完成。若参与运算的类型不同,则如图2-32-3所示,所示,先转换成同一类型,然后进行运算,以保证精度不降先转换成同一类型,然后进行运算,以保证精度不降低,运算结果是表达式最终类型。低,运算结果是表达式最终类型。(2 2)逻辑运算符要求参与的操作数必须是)逻辑运算符要求参与的操作数必须是boolbool型数据,型数据,如果有其他类型数据,编译系统会自动将非如果有其他类型数据,编译系统会自动将非0 0数据转数据转换为换为

73、truetrue,0 0转换为转换为falsefalse。(3 3)在赋值运算中,赋值号两边的数据类型不同时,赋)在赋值运算中,赋值号两边的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。值号右边量的类型将转换为左边量的类型。返回本讲目录返回本讲目录返回本讲目录返回本讲目录12强制类型转换qq自动类型转换是系统自动进行的,不需要用户干预。自动类型转换是系统自动进行的,不需要用户干预。C+C+还允许用户根据自己的需要将运算对象的数据类型转换成还允许用户根据自己的需要将运算对象的数据类型转换成所需要的数据类型,这就是强制类型转换。强制类型转换所需要的数据类型,这就是强制类型转换。强制类型转

74、换的运算格式如下:的运算格式如下:类型说明符类型说明符类型说明符类型说明符( (表达式表达式表达式表达式) ) ( (类型说明符类型说明符类型说明符类型说明符) )表达式表达式表达式表达式或或例如:例如:(int)5.38(int)5.38/ /将将5.385.38转换成整型,其值为转换成整型,其值为5 5(int)(5.38+4.56)/(int)(5.38+4.56)/将表达式将表达式5.38+4.565.38+4.56的和的和9.949.94转换成转换成intint型,值为型,值为9 9(int)5.38+4.56(int)5.38+4.56 / /将将5.385.38转换成转换成int

75、int型的值型的值5 5,然后再加上,然后再加上4.564.56,值为,值为9.56 9.56 返回本讲目录返回本讲目录返回本讲目录返回本讲目录练一练【练习练习2-22-2】 用三目运算符求两个数用三目运算符求两个数x x,y y中的较大数。中的较大数。解:(解:(1 1)程序分析如下:在这里首先要比较)程序分析如下:在这里首先要比较x x与的大小,与的大小,然后再将较大的值显示出来。然后再将较大的值显示出来。 输出提示信息,然后输入两个整数输出提示信息,然后输入两个整数x x和和y y; 比较两个数,若比较两个数,若x x大则将大则将x x赋给赋给maxmax,否则将,否则将y y赋给赋给m

76、axmax; 将较大值将较大值maxmax显示出来。显示出来。点击打开点击打开【练习练习2-22-2】 源程序源程序返回本讲目录返回本讲目录返回本讲目录返回本讲目录本讲小结qq这一讲我们学习了这一讲我们学习了C+C+的算术运算符、逻辑运算符、赋的算术运算符、逻辑运算符、赋值运算符、自增自减运算符、条件运算符、逗号运算符、值运算符、自增自减运算符、条件运算符、逗号运算符、sizeofsizeof运算符、括号运算符以及位运算符。各种运算的种运算符、括号运算符以及位运算符。各种运算的种类繁多,且具有不同的优先级与结合性。复杂的运算符类繁多,且具有不同的优先级与结合性。复杂的运算符要多使用括号以方便阅

77、读与理解。在表达式中,参加运要多使用括号以方便阅读与理解。在表达式中,参加运算的数据如果类型不同可以自动转换,自动转换的规律算的数据如果类型不同可以自动转换,自动转换的规律是从低类型向高类型转换,以保持数据精度,不丢失数是从低类型向高类型转换,以保持数据精度,不丢失数据为原则。据为原则。C+C+还提供了多种强制类型转换方法,在特还提供了多种强制类型转换方法,在特定的场合进行应用。定的场合进行应用。返回本讲目录返回本讲目录返回本讲目录返回本讲目录本章小结qq数据是程序处理的对象,数据可以依据其本身的特点进行分类。数据是程序处理的对象,数据可以依据其本身的特点进行分类。C+C+中中的数据类型又分为

78、基本类型和自定义类型,基本类型是的数据类型又分为基本类型和自定义类型,基本类型是C+C+编译系统内编译系统内置的。置的。C+C+的基本数据类型有的基本数据类型有boolbool(布尔型)、(布尔型)、charchar(字符型)、(字符型)、intint(整型)、(整型)、floatfloat(浮点型,表示实数)、(浮点型,表示实数)、doubledouble(双精度浮点型,简称(双精度浮点型,简称双精度型)。除了双精度型)。除了boolbool型外,数据类型主要有两大类:整数和浮点数。型外,数据类型主要有两大类:整数和浮点数。因为因为charchar型从本质上说也是整数类型,它是长度为型从本质

79、上说也是整数类型,它是长度为1 1字节的整数,通常字节的整数,通常用来存放字符的用来存放字符的ASCIIASCII码。码。qq本章还介绍了本章还介绍了C+C+中的运算符与表达式。主要的运算符有算术运算符、中的运算符与表达式。主要的运算符有算术运算符、关系运算符、逻辑运算符、赋值运算符、自增自减运算符、条件运算关系运算符、逻辑运算符、赋值运算符、自增自减运算符、条件运算符、逗号运算符、符、逗号运算符、sizeofsizeof运算符、括号运算符、位运算符。在学习运算运算符、括号运算符、位运算符。在学习运算符的时候,除了注意其功能外,还要注意它们的优先级以及结合性。符的时候,除了注意其功能外,还要注意它们的优先级以及结合性。返回本章目录返回本章目录返回本章目录返回本章目录

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

最新文档


当前位置:首页 > 高等教育 > 研究生课件

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