第2章 数据类型与表达式(new).ppt

上传人:sccc 文档编号:6105688 上传时间:2023-09-24 格式:PPT 页数:52 大小:763.05KB
返回 下载 相关 举报
第2章 数据类型与表达式(new).ppt_第1页
第1页 / 共52页
第2章 数据类型与表达式(new).ppt_第2页
第2页 / 共52页
第2章 数据类型与表达式(new).ppt_第3页
第3页 / 共52页
第2章 数据类型与表达式(new).ppt_第4页
第4页 / 共52页
第2章 数据类型与表达式(new).ppt_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《第2章 数据类型与表达式(new).ppt》由会员分享,可在线阅读,更多相关《第2章 数据类型与表达式(new).ppt(52页珍藏版)》请在三一办公上搜索。

1、第2章 数据类型与表达式,C+语言程序设计教程 第2章数据类型与表达式,制作人杨进才 沈显君,C+语言程序设计教程 第1章C+编程简介,第2章 数据类型与表达式,学习目标,掌握各种基本数据类型的定义名、长度、表示范围;掌握各种类型的数值的表示;弄清变量以及变量赋值的实质,标识符的构成规则,会定义各种类型的变量以及定义变量的初值;弄清变量与常量,三种常量之间的区别;掌握常用运算符的含义、优先级、结合性、使用方法;理解表达式的构成规则、表达式的左值和右值的含义,会根据计算式写出相应的表达式;掌握隐式类型转换和显式类型转换的概念和使用方式,能够使用显式类型转换强制进行表达式值的转换。,C+语言程序设

2、计教程 第2章数据类型与表达式,C+语言程序设计教程 第1章C+编程简介,2.1 数据类型概述,C+语言程序设计教程 第2章数据类型与表达式,C+语言程序设计教程 第1章C+编程简介,2.2 基本数据类型,C+语言程序设计教程 第2章数据类型与表达式,2.2.1 字符集,字符集是构成C+程序语句的最小元素。字符集由下列各类字符构成:,(1)英文字母 AZ,az,(2)数字 0-9,(3)特殊字符:,二进制数的编码表示:原码,一个数在机内的表达形式”机器数”,而它代表的数值称为机器数的”真值”。原码 用“0”表示正数,”1“表示负数符号绝对值表示的编码例如:X=+0101011 X原=0 010

3、1011X=-0101011 X原=1 0101011 符号位缺点:零的表示不唯一:+0原=000.0-0原=100.0进行四则运算时,符号位需单独处理,且运算规则复杂。,信息的表示与存储,二进制数的编码表示:反码,正数的反码与原码表示相同。负数的反码与原码有如下关系:符号位相同(仍用1表示),其余各位取反(0变1,1变0)。例如:X=-1100110 X原=11100110 X反=10011001X=+0000000 X原=00000000 X反=00000000反码中零的表示也不唯一X=-0000000 X原=10000000 X反=11111111反码只是求补码的中间码,信息的表示与存储

4、,二进制数的编码表示:补码,计算机中的补码表示法模数:物理意义上的某个计量器的容量。(例如时钟)在模数系统中,一个数减去另外一个数,等于第一个数加上第二个数的补码。8+(-2)=(8+10)mod 12/10是-2在模12下的补码。正数的补码与原码表示相同。负数的补码 可由模数与真值做加法求得 X=-0110 X补=24+(-0110)=1010负数的补码由该数反码的末位加 1 求得(求反+1)X=-0110 X反=1001 X补=X反+1=1010对补码再求补即得到原码 X=-0110 X补=1010 再求补 X补反=1101 X补补=1101+1=1110=X原补码运算规则符号位可作为数值

5、参加运算减法运算可转换为加法运算:加上一个负数等于加上该数的补码67-10=67+(-10)=67补-10补=?补码运算的结果仍为补码(要转换成真值)10-67=?,信息的表示与存储,小数的表示方法,计算机中通常采用浮点方式表示小数一个数 N 用浮点形式表示可以写成:N=M2E E表示2的幂,称为数N的阶码。阶码确定了数N的小数点的位置,其位数反映了该浮点数所表示的数的范围。M表示数N的全部有效数字,称为数N的尾数。其位数反映了数据的精度。介码和补码都是带符号的数。可以用不同的码制表示,尾数常用原码或补码,介码多用补码表示。15 14 1211 10 0 介码 尾数 介符 尾符假设一个16位机

6、,介码4位,尾数12位。,信息的表示与存储,数的表示范围,一个m位整数(包括一个符号位),如果采用原码和反码表示法,能表示最大数2m-1-1.最小数-(2m-1-1).用补码表示能表示最大数2m-1-1.最小数-2m-1.X补=100.00,1既表示符号又表示数值。对应真值-2m-1 例如m=8 原码 反码表示范围-127+127.补码-128+127浮点数表示范围:由介码r位整数(补码)表示,尾数用n位定点小数(原码)表示:,C+语言程序设计教程 第1章C+编程简介,2.2.2 基本数据类型,C+语言程序设计教程 第2章数据类型与表达式,表中符号 表示可选,表示其中的内容可以缺省,也有默认的

7、意思。如signed char表示char类型默认为signed char;使用类型名定义一个变量时,中的内容可以省略。,整型int默认为有符号整型,即:类型signed int与int相同,所以signed short int、signed long int分别与short int、long int相同。,如果int型有长短修饰或符号修饰时,int也可缺省。,符号的类型修饰signed,unsigned与长短的修饰short,long可以随意组合,且前后顺序随意。,整型数据的长度(存储空间)随系统的不同而不同,在16位系统下如DOS,其长度与短整型相同,占有16bit。在32位系统如Linu

8、x、Unix、Windows NT系统下,长度为32bit。表中的整型是32位系统下的整型。,有效位数栏中的数据是指浮点数十进制的有效位数,包括整数与小数部分。,空值型void用于描述没有返回值的函数以及通用指针类型。,有的编译器如visual C+对long double采用8字节存储。,C+中提供wchar_t类型,用于描述像汉字这样的大字符集。汉字字符集有简体字符集GB2312、繁体字符集Big5。在C+中,对于大字符集字符可用多个char类型的数据来实现,wchar_t类型主要用在国际化程序的实现中。,C+语言程序设计教程 第1章C+编程简介,2.3 数值,C+语言程序设计教程 第2章

9、数据类型与表达式,数值就是指直接参加运算的数。在有的书上称为文字常量(literal constant)或常量。文字是程序中直接用符号表示的数值,常量是指在程序运行过程中,其值不能被改变的量。出现在程序中的数值在程序运行过程中是不能被改变的,故称之为文字常量。通俗说,文字常量就是数值。,2.3.1 整型数,各种进制的整数表示如下:,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,以0 x或0X开头,数字有0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F。其中英文字母AF代表的值为1015。如:0 x12B表示十六进制数(12B)16,其值为

10、:1162+2161+11160,等于十进制数299。-0 x17等于十进制数-23。十六进制使用的英文字母除了使用大写字母外还可以使用a、b、c、d、e、f小写字母,并且大小写可以混用。,(3)十六进制整数,注意:各进制数只能使用其规定的数字,进制使用的数字为0N-1。如0128是不合法的八进制数,因为8不是八进制所使用的数字。八进制整数前不能省略0,省略了0就是十进制数。,各种类型整数的表示,(1)基本整型数,基本整型数不需要在数字后加任何后缀。在16位系统下,整型数的长度为16bit(2字节)如:12、-1235等是用十进制表示的整型数。如0 xc、0 xfb2d是用十六进制表示的整型数

11、,其值分别为12、-1235。在32位系统下,长度为32bit(4字节),如:12、-1235等。12、-1235用十六进制表示分别为0 xc、0 xfffffb2d。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,长整型的长度与取值范围与32位系统下的基本整型一样。表示方法则是在数字后加l或L做标记。如:345667L、-123L、12l。,(2)长整型数,注意:为了区别表示长整型数字母l与数字1,一般使用大写L;在定义一个整型数时,不管采用哪种进制形式,都不要超过其表示范围。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数

12、据类型与表达式,(1)十进制数形式,由09和小数点组成。如:23.456、-12.3等。,(2)指数形式,表示格式为:,2.3.2 浮点型数,浮点型数即我们平常使用的实型数,由整数部分和小数部分组成。通常有两种表示形式:,十进制浮点型数基本整型数1 E 基本整型数2,符号|表示“或”。,十进制浮点型数与基本整型数1是尾数;,E或e代表底数10;,基本整型数2为指数。如:1.3e4、-12.5e-4分别表示1.3104和-12.510-4。,注意:当以指数形式表示一个实数时,整数部分和小数部分可以省略其一,但不能都省略。如.123E5、123.E-6都是正确的,但不能写成E-2这种形式。浮点数默

13、认为双精度浮点型,在内存中占8个字节,取值范围为1.7e308。如果带有后缀F或f,则为float类型,在内存中占4个字节,取值范围为3.4e38,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,转义符形式1:,2.3.3 字符型数,字符数是用英文单引号括起来的一个字符。如:a,A等。,字符助记符,有些ASCII码字符如回车、退格等不能直接用在用单引号中。这些数据可用转义序列来表示:,转义符形式2:,字符助记符只有一个字母,例如n、t分别为newline(换行符)、table(制表符)的助记符。故n、t分别表示换行符与制表符。,字符的ASCII码值,字符

14、的ASCII码值的形式为ooo与xhh,其中ooo表示3位八进制数,xhh表示2位十六进制数。例如,制表符table用第2种形式的转义序列表示为011或x09。ooo中,ooo为不超过3位的八进制数字,可以不以0开头。,C+语言程序设计教程 第1章C+编程简介,常用预定义的转义序列,C+语言程序设计教程 第1章C+编程简介,转义序列的用法举例,A;B;C;D;E;F;屯屯,注意:由于一个汉字字符包括两个字符,因此不能在单引号中使用汉字。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,This is a stringn,字符串与字符比较的区别:,2.3.

15、4 字符串,字符串数值简称字符串,是使用一对双引号括起来的字符序列。例如,英文串:,中文串:我们都是中国人t我们热爱自己的祖国n,(1)字符由单引号括起来,字符串由双引号括起来。如:a与a分别表示a字符与a这个字符串。(2)字符只能是单个字符,字符串则可是零个或多个字符。如:abd是不合法的。但是合法的,表示空串。(3)字符占一个字节的内存空间,字符串占内存字节数等于字符串的长度加1。系统自动在字符串末尾添加0作为结束标记。如:a在内存中占用一个字节;而a 在内存中占用两个字节,分别存放a和0。,2.3.5 布尔型数,布尔型数值只有两个:true(真)和false(假)。在C+的算术运算式中,

16、把布尔型数据当作整型数据,true与false分别当作1与0。在逻辑运算式中则把非0数据当成true,把0当成false。,注意:不能将true与false写成TRUE与FALSE。,C+语言程序设计教程 第1章C+编程简介,2.4 变量,C+语言程序设计教程 第2章数据类型与表达式,变量是存储数据的内存区域,变量名是这块区域的名字或助记符。变量之所以叫变量是因为在程序运行的过程中变量标识的内存区中的数据可以改变。在C+中变量取名要遵循标识符的构成规则。,2.4.1 标识符与关键字,标识符用来标识程序中的一些实体(变量名称、常量名称、函数名称)。标识符的构成规则如下:,(1)以大写字母、小写字

17、母或下划线_开头;,(2)可以由大写字母、小写字母、下划线、数字组成;,(3)大写字母与小写字母分别代表不同的标识符;,(4)不能是C+的关键字。,C+的关键字是C+预定义的单词,也叫保留字,意思是为C+语言保留,不能用作标识符。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,C+的关键字表,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,变量定义的一般格式为:,例如:int sum,area;float x,y,z;,给变量赋初值的格式如下:,2.4.2 变量的定义与赋初值,数据类型 变量名1,变量名2,变量名

18、n;,数据类型 变量名1=初值1,变量名2=初值2,变量名n=初值n;,例如:int sum=100;double pi=3.1416;char c1=a,c2=b;,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,变量定义的l另一种格式为:,例如:int sum(100);double pi(3.1416);char c1(a),c2(b);,数据类型 变量名1(初值1),变量名2(初值2),变量名n(初值n);,2.5 常量,常量是指在程序运行过程中,其值不能被改变的量。因此,一个具体的数值称为文字常量。如:i=255;area=r*r*3.14;,

19、在程序中直接使用数值有两个问题:,(1)可读性差;,(2)可维护性差;,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,C+符号常量的定义形式(宏定义,预处理阶段替换)如下:,例如:#define MaxChar 255#define PI 3.14,2.5.1 符号常量,#define 符号常量名 数值,注意:定义符号常量时不能用赋值符,#define PI=3.14是错误的。由于define 是预处理指令,语句不能以分号结尾。,C+为符号常量提供了一种新方法,格式为:,2.5.2 常变量,const 数据类型 符号常量名=数值;,const可以与数据

20、类型说明颠倒。,用const修饰后,变量的值就不能改变了,实质上是一种“常变量”。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,例如:const short int MaxChar=255;const float PI=3.14;,三种常量比较表:,与直接使用文字常量相比,使用符号常量增强了程序的可读性,可维护性。,常变量与变量定义的格式相似,使程序保持良好的风格。,常变量可以按照不同的需要选择合适的数据类型,节省内存空间,在运算式中有明确的类型。,注意:在定义常变量时一定要赋初值。例如:const float PI;/错误,定义时没有给出初值 常变

21、量不是变量,在程序中间不能更新其值。例如:PI=3.14159;/错误!常量不能被改变,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,运算符是描述对数据进行的运算(操作)、体现数据之间运算关系的符号,运算符也叫操作符。表达式是运算符与数据连接起来的表达运算的式子,表达式也称运算式。,优先级是指表达式中运算符运算的顺序。当一个表达式中包含多个运算符时,先进行优先级高的运算,再进行优先级低的运算。如果表达式中出现了多个相同优先级的运算,运算顺序就要看运算符的结合性了。结合性是指操作数左右两边运算符的优先级相同时,优先和哪个运算符结合起来,进行运算。运算符的

22、结合顺序有两种:左结合和右结合。,2.6.1 优先级与结合性,左结合,num1 op1 num2 op2 num3(num1 op1 num2)op2 num3,右结合,num1 op1 num2 op2 num3 num1 op1(num2 op2 num3),2.6 运算符与表达式,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,基本算术运算符及其含义:,表中优先级数字小的优先级高,(1)算术运算符的意义、优先级与数学中一致:+(正号),-(负号)是一元运算,优先级高于二元运算,*、/、%优先级高于+(加)、-(减)运算。,例如:a=10;b=5;a

23、+b*-1;得到结果5,(2)%要求两个操作数的值必须是整数或字符型数。“操作数1%操作数2”计算结果是操作数1被操作数2除的余数。当两个操作数都是正数时,结果为正;如果有一个(或两个)操作数为负,余数的符号取决于机器。,21%6/结果是34%2/结果是021%-5/机器相关:结果为-1或1,2.6.2 算术运算符,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,基本算术运算符及其含义:,2.6.2算术运算符,(3)当/运算符用于两个整数相除时,如果商含有小数部分,将被截掉。如果要进行通常意义的除运算,则至少应保证除数或被除数中有一个是浮点数或双精度数。

24、,(4)在使用算术运算符时,需要注意有关算术表达式求值溢出的处理问题;,5/4/结果是14/5/结果是05/4.0/结果是1.254.0/5/结果是0.8,short i=32767,j,k;j=i+1;k=i+2;coutj=j,k=kendl;执行结果为:j=-32768,k=-32767,注意:在书写除法运算式时,通常将参加运算的整数值后补上小数点与0作为双精度(double)常量参加运算。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,关系运算符及其含义:,2.6.3 关系运算符,(1)若关系运算符的计算结果继续用在表达式中,true与fals

25、e分别当成了1与0。,(2)关系运算符的操作数可以是任何基本数据类型的数据,但由于实数(float)在计算机中只能近似地表示一个数,所以,一般不能直接进行比较。当需要对两个实数进行=、!=比较时,通常的做法是指定一个极小的精度值,若两实数的差在这个精度之内时,就认为两实数相等,否则为不等。,x=y 应写成 fabs(x-y)1e-6/fabs(x)求double类型数x的绝对值,(3)关系表达式就是由关系运算符将两个操作数连接起来的式子。这两个操作数可以为常量、变量、算术表达式等。,例如:a+bc+d ab=cd a=bc,注意:关系运算符的比较运算是由两个等号组成,不要误写为赋值运算符=。,

26、C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,逻辑运算符操作数类型为bool型,返回类型亦为bool型。,2.6.4 逻辑运算符,(1)逻辑运算符的操作数为bool型,当为其它数据类型时,将它转换成bool值参加运算。,(2)C+对于二元运算符&和|可进行短路求值(short-circuit evaluation)。由于&与|表达式按从左到右的顺序进行计算,如果根据左边的计算结果能得到整个逻辑表达式的结果,右边的计算就不需要进行了,该规则叫短路求值。,设a=10,b5,c-3 则!a的值为 0;a&b的值为1;a|b的值为1;,(3)当表示的逻辑关系比

27、较复杂时,用小括号将操作数括起来是一种比较好的方法。,例如:(num!=0)&(1/num0.5),逻辑运算符列表 逻辑运算的功能表,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,位运算分为移位运算与按位逻辑运算,2.6.5 位运算符,(1)运算符 将操作数逐位取反,即将原来为1的位变为0,原来为0的位变为1。例如,按位求反c的结果为01111000。,(2)运算符 将两个操作数对应位逐一地进行逻辑与运算。与运算的规则为“见零则零”,即两个数中只要有一个为0,则其逻辑与的结果就为0。,(3)运算符|将两个操作数对应位逐一地进行逻辑或运算。逻辑或运算的规

28、则为“见壹则壹”,即两个数中只要有一个为1,则其逻辑或的结果就为1。,unsigned char c(135),d(43);二进制表示分别为10000111和 00101011。,(4)运算符 将两个操作数对应位逐一地进行逻辑异或运算。逻辑异或运算的规则为“同则零,异则壹”,即两个数只要不同,则其逻辑异或的结果就为1;否则为0。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.5 位运算符,(5)运算符 将左操作数向左移动其右操作数所指定的位数,移出的位补以0。将一个数左移一位,相当将该数乘以2;左移两位,相当将该数乘以4。一般说来,将一个数左移

29、n位,就相当将该数乘以2n。所以,在程序中,常用左移位来进行快速的乘法运算。,(6)将左操作数向右移动其右操作数所要求的位数,移出的位补以0。将一个数右移n位,相当于将该数除以2n。这与整型和字符型数据的除法运算完全一致,所以在程序中常用右移位来进行快速的除法运算。,注意:位运算符是对其操作数按其二进制形式逐位地进行逻辑运算或移位操作的,运算对象为bool、char、short、int等类型数,但不得是实型数据。用移位方法进行乘法运算时,同样要注意溢出问题。按位左移运算符与插入运算符同形(同一个符号),按位右移运算符与提取运算符同形。那么编译器是如何来区分cout73;是将7左移3位,还是向屏

30、幕上输出7、3呢?编译器将把该表达式解释成向屏幕输出7、3,这是由于cout是C+语言中预定义的输出流类的对象,在该对象所属的类中,对运算符所执行的操作进行了新的定义。对于按位右移与提取运算符,编译器也是按此原则解释。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,赋值运算符表,2.6.6 赋值运算符,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.6 赋值运算符,简单赋值运算符的使用格式:,左表达式=右表达式,其功能是将右表达式(右操作数)的值放到左表达式表示的内存单元中,因此左表达式一般是变量或表示某

31、个地址的表达式,称为左值,在运算中作为地址使用。右表达式在赋值运算中是取其值使用,称为右值。所有赋值运算左表达式都要求是左值。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.6 赋值运算符,复合赋值运算符的运算过程为:先将两个表达式做运算符所规定的算术或位运算,然后将运算的结果赋给左表达式。,例如:设a和b的值分别为2和6,复合赋值运算式b*=a+3的计算过程为:先计算复合赋值运算符的右表达式的值,即a+3的和,结果为5;然后,做复合赋值运算符所规定的算术运算,即求b与上述结果的乘积,结果为30;最后进行赋值运算,将上述运算结果赋给复合赋值运算

32、符的左操作数b。同时,整个表达式的值也为30。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第 2章数据类型与表达式,2.6.6 赋值运算符,关于赋值运算符的说明:,(1)用赋值运算符连接起来的表达式叫做赋值表达式。赋值表达式是C+语言(包括C语言)中所特有的,其它大多数语言中,只有赋值语句而没有赋值表达式这一语法要素。赋值表达式仍可作为操作数进行运算,赋值表达式的类型为左边变量的类型,其返回值为赋值后左边变量的值。,float x;x=2.6;/返回值为2.6,类型为float;,(2)复合赋值运算符所表示的表达式不仅比一般赋值运算符表示的表达式简练,而且所生成的目标代码

33、也较少,因此,C+语言程序中应尽量采用复合赋值运算符的形式表示。,(3)在C+中还可以连续赋值,赋值运算符具有右结合性.,x=y=2.6;/它相当于:x=(y=2.6);a=b=3+8;/先做3+8,然后将11赋给b,再将b的值11赋给a。c=b*=a+3;/运算分解为 a+3 b=b*(a+3)c=b,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.7+、-运算符,这两个运算符都前置和后置两种形式。所谓前置是指运算符在操作数的前面,后置是指运算符在操作数的后面。例如:i+;/+后置-j;/-前置,(1)都是使操作数的值增1或减1,但对表达式的值

34、的影响却完全不同。,前置形式 int i=5;x=+i;y=i;/i先加(增值)后再赋给x(i=6,x=6,y=6)int i=5;+i;x=y=i;/(i=6,y=6,x=6)后置形式 int i=5;x=i+;y=i;/i赋给后再加(x=5,i=6,y=6)int i=5;i+;x=y=i;/(i=6,y=6,x=6),(2)由于+、-运算符内含了赋值运算,所以运算对象只能左值,不能作用于常量和表达式。5+、(x+y)+都是不合法的。,前缀运算是先变化后运算,后缀运算是先运算后变化。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.8 其它运

35、算符,1.条件运算符,条件运算符也称三目运算符,是C+中唯一的一个三目运算符。格式为:,其中,d1,d2和d3分别是三个表达式。该运算符的功能是:先计算d1;如果d1的值为true(非0),返回d2的值作为整个条件运算表达式的值;如果d1的值为false(0),返回d3的值作为为整个条件运算表达式的值。条件运算表达式的返回类型将是d2和d3这两个表达式中类型高(表示的数值范围大)的那种类型。,例如:a=(xy?12:10.0);/若xy(xy的值为true),将12赋给a;否则a=10.0。条件运算表达式的返回类型为10.0的类型double。x?y=a+10:y=3*a-1;/若x非0则把a

36、+10的值赋给y,否则把3*a-1的值赋y,d1?d2:d3,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.8 其它运算符,2.逗号运算符,逗号可作分隔符使用,将若干变量隔开,如:int a,b,c;一般形式为:,逗号表达式的求解过程为:先求表达式1的值,再求表达式2的值,最后求表达式n的值。整个逗号表达式结果的值是最后一个表达式n的值。它的类型也是最后一个表达式的类型。,例如:a=a+b,b=b*c,c=c-a;设a=3,b=5,c=7,该表达式依次计算出a的值为8、b的值为35、c的值为-1、且整个表达式的值为-1。更进一步:x=(a=a+

37、b,b=b*c,c=c-a);/x的值为-1。,表达式1,表达式2,表达式n;,逗号运算符还用在只允许出现一个表达式而又需要多个表达式才能完成运算的地方,用它将几个表达式连起来组成一个逗号表达式。,在C+语言所有运算符中,逗号表达式的优先级最低。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.8 其它运算符,3.求字节运算符 sizeof,sizeof运算符用来求得某种类型或某个变量所占字节数(长度)。它是一个单目运算符,用在类型说明符或变量名的左边,该运算符的使用形式如下:,例如:int a,b 10;,sizeof(类型说明符|变量名|常量

38、),在32位系统下,表达式sizeof(a)的值应该为4,与sizeof(int)的值相等;同样,sizeof(b)的值为40,它是数组b的所有元素所占的总内存字节数;sizeof(3.1)的值为8,即双精度数的长度。,(1)下标运算符。,4.成员运算符,(2)取结构或联合变量成员运算符.,(3)通过指针取结构或联合体成员运算符-,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.6.8 其它运算符,5.取地址运算符&,该运算符用来获取某个变量的内存单元地址值,格式如下:,&变量名,例如:int a;&a表示取变量a的地址值,即是变量a在内存中被分配的

39、内存地址值。,6.取指针内容运算符*,取指针内容运算符是一个单目运算符,用来间接地获取某指针变量指向内存单元的值。例如:int a5;int*p=&a;变量a标识的内存单元中存放的值为5,指针变量p指向变量a,将该运算符作用于p(即*p),表示取p指向的内存单元的内容,p指向的内存单元为变量a。因此,*p取出a存放于内存单元的值5。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,7括号运算符(优先级最高的最牛运算符),该运算符是用来改变原来的优先级的,括号运算符的优先级最高。括号运算符可以包含使用(即嵌套),即在括号内还可以使用括号,在出现多重括号时,

40、应该先作最内层括号,按从里向外的顺序进行。,其它运算符表,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,(1)运算符的优先级按单目、双目、三目、赋值依次降低。,8.运算符优先级的规律,单目运算是右结合的,旨在与右边的数结合在一起形成一个整体,因此优先级高。,算术运算中的+(正)、-(负)、+、-、逻辑运算中的取非!,按位运算中的取反从各类运算中提取到单目运算中。,赋值运算之所以优先级低且为右结合,是因为要右边的表达式计算完后才赋值给左边的变量。,移位运算是一种高效的算术运算,看作算术运算的补充,优先级在算术运算后。,算术运算后的结果要进行比较,因此关系

41、运算的优先级在算术、移位后。,关系运算得出的逻辑值要进行运算,所以逻辑运算优先级在关系运算后。,(2)算术、移位、关系、按位、逻辑运算的优先级依次降低。,关系运算得出的逻辑值要进行运算,所以逻辑运算优先级在关系运算后。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,【例2-2】演示算术运算表达式的用法。,2.6.9 表达式的使用,运行结果,10 3523.330 4 3,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,【例2-3】演示逻辑运算表达式的用法。,2.6.9 表达式的使用,运行结果,0 1 11 2 2

42、2 1 2,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,【例2-3】演示逻辑运算表达式的用法。,2.6.9 表达式的使用,运行结果,10 20 1010 20 30,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,1.自动转换,C+语言支持不同数据类型的数据之间的混合运算。在对这样的表达式求值时,需要对其中的一些操作数进行类型转换。表达式中的类型转换有两种方式:自动转换和强制转换。,各种类型的高低顺序如下所示:,2.7 类型转换,(1)若参与运算量的类型不同,则先转换成同一类型,然后进行运算,转换按数据长度增加

43、的方向进行,以保证精度不降低,且运算的结果(即表达式的值)的类型是运算式的最终类型。,(2)所有的浮点型运算都是以双精度进行的,即使仅含float单精度运算的表达式,也要先转换成double型,再作运算。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.7 类型转换,(3)bool、char型和short型参与运算时,必须先转换成int型。,(4)逻辑运算符要求参与运算的操作数必须是bool型,如果操作数是其它类型,编译系统会自动将非0数据转换为true,0转换为false。,(5)位运算的操作数必须是整数,当二元位运算的操作数是不同类型的整数时,也

44、会自动进行类型转换。,(6)在赋值运算中,赋值号两边的数据类型不同时,赋值号右边量的类型将转换为左边量的类型。如果右边量的数据类型长度比左边长时,可能丢失一部分数据,或降低精度。,float pi=3.1;/降低了精度float f=3.5f;/未降低精度,(7)将signed型的整型变成较长的signed型的整型,unsigned型变成较长的整型时,原值以及正负符号不变。,int a=-2;long b=a;/b的值仍为-2,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.7 类型转换,(8)将unsigned型和同长度的signed型互变时,其值

45、根据自身所属范围发生适当的变化。,unsigned short a=65535;short int b=a;/b的值变成-1 short int a=-2;unsigned short b=a;/b的值变成65534,假设定义变量为:char c=1;float f=3.1;表达式(3=f)+(B-c)/1.0+f的类型转换图如下:,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.7 类型转换,2.强制类型转换,旧式的C语言风格的强制类型转换的格式如下:,类型说明符(表达式)或(类型说明符)表达式,例如:int(a+b)/将a+b运算的结果转换成in

46、t型 5/float(3)/将3转换成float型,int a;float x=8.57;a=(int)x;/取整数部分,舍弃小数部分 结果a=8,x仍为float型,其值仍为8.57。,注意:采用强制类型转换将高类型数据转换为低类型数据时,数据精度可能会受到损失。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.7 类型转换,标准C+强制类型转换:,static_cast用于一般表达式的类型转换。例如:int a;float x=8.57;a=static_cast(x);/将变量x的类型转换成int型。,static_cast(表达式)-对应于旧

47、有的C语言方式reinterpret_cast(表达式)const_cast(表达式)dynamic_cast(表达式),reinterpret_cast用于非标准的指针数据类型转换,如将void*转换成char*。,const_cast将const表达式转换成非常量类型,常用于将限制const成员函数的const定义解除。,dynamic_cast用于进行对象指针的类型转换。,注意:进行类型转换,只是将值进行了转换,原变量的类型不变。,C+语言程序设计教程 第1章C+编程简介,C+语言程序设计教程 第2章数据类型与表达式,2.8 表达式的副作用,对于表达式:exp1+exp2;先计算exp1

48、还是exp2?不同的编译器有不同的做法。,在数学上,对于双目运算符,不论先计算哪一个操作数,要求最终计算结果一样。在C+中,在计算一个操作数时,该计算会改变(影响)另一个操作数,从而导致因操作数的不同计算次序产生不同的最终计算结果。对于因操作数计算的次序不同产生不同结果的表达式为带副作用的表达式。在计算时会影响其他操作数的值,引起副作用的运算符为带副作用的运算符。如+、-以及各种赋值运算符为带副作用的运算符。,x=1,(x+2)*(+x)先计算x+2表达式的值为6;若先计算+x,由于修改了x+2中x的值,计算结果为。,C+中规定,先计算逻辑与(&)和逻辑或(|)的第一个操作数,再计算第二个操作

49、数,以便进行短路求值。条件(?:)、逗号(,)运算符也规定了操作数的计算次序,除此以外,其他运算符没有规定操作数的计算次序,计算次序由具体的编译器决定。因此在含这些运算符的表达式中,避免在操作数中引入带副作用的运算符。,C+语言程序设计教程 第1章C+编程简介,2.9 本章小结,字符集是构成C+程序语句的最小元素,程序的中除了字符串常量外,所有构成程序的字母均取自字符集。C+的基本数据类型包括布尔型、字符型、整数型、实数型、空值型。分别用bool、char、int、float、void表示。其中float类型对有些带小数的实数只能近似表示。各种数据类型都有自己的表示范围。在字符常量中,有些转义

50、如t,n常用在输出流中用来控制输出格式。整数(常量)的默认类型为int,实数(常量)的默认类型为double。给变量赋值的实质是将一个数放到变量名标识的内存单元中。在包含赋值运算的运算符中,操作数必须是一个左值。文字常量、符号常量、常变量统称常量。各种运算符种类繁多,且具有不同的优先级与结合性,大致优先顺序为:一元运算优先于二元运算;二元运算优先于三元运算;算术、移位、关系、按位、逻辑运算的优先级依次降低。复杂的运算式要多使用括号以方便阅读与理解。在表达式中,参加运算的数据如果类型不同可以自动转换,自动转换的规律是低类型向高类型转换,以不丢失数据,不降低精度为原则。除了自动类型转换外,C+提供

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号