二级电子二章_第1页
二级电子二章_第2页
二级电子二章_第3页
二级电子二章_第4页
二级电子二章_第5页
已阅读5页,还剩73页未读 继续免费阅读

下载本文档

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

文档简介

第二章数据类型、运算符和表达式主要内容C++语言的数据类型常量变量运算符和表达式22.1C++语言的数据类型C++程序中的每个变量或常量都要拥有一种数据类型C++中的数据类型大体可以分成三类基本类型导出类型用户定义类型32.1.1基本类型逻辑型用关键字bool表示,又称为bool型(布尔型)取值只包含true和false。true对应整数1,表示逻辑真;false对应整数0,表示逻辑假。字符型用关键字char表示,又称为char型字符型的取值范围是全部基本字符以及ASCII码集或扩充ASCII码集对应的全部符号字符型数据占用1字节(Byte),即8位(bit)空间42.1.1基本类型整型整型用关键字int表示,又称为int型整型数据的取值范围是计算机所能表示的全部整数有符号短整型数的取值范围是-32768~32767。整型数据占据的存储空间大小根据机器的不同而有所差别例如,在16位计算机中,整型变量占2个字节,而在32位计算机中,整型变量占4个字节52.1.1基本类型浮点型浮点型包括单精度型和双精度型两种,单精度型用关键字float表示,又称float型;双精度型用关键字double表示,又称double型。C++中的浮点数可以采用尾数加阶码的表示形式,其中单精度型的取值范围是-3.4E38~3.4E38,但不能超过7位有效数字;双精度型的取值范围是-1.7977E308~1.7977E308,但不能超过15位有效数字。如果有效数字位数超出位数,则舍去后面的数字float型数据一般占用4字节(Byte),即32位(bit)空间;double型数据一般占用8字节(Byte),即64位(bit)空间62.1.1基本类型空值型用关键字void表示,因此又称为void型空值型的取值为空C++中不存在void型的常量或变量。C++语言规定,所有函数声明都必须指明返回值类型,没有返回值的函数应说明为void类型void类型还可以用来声明一个指针变量,例如:void*p;72.1.2基本类型的派生类型派生类型基本类型的字长及其取值范围可以放大和缩小,改变后的类型就叫做基本类型的派生类型派生类型声明符由基本类型关键字char、int、float、double前面加上类型修饰符组成。类型修饰符包括:short 短类型,缩短字长;long 长类型,加长字长;signed 有符号类型,取值范围包括正负值;unsigned 无符号类型,取值范围只包括正值;实际使用中还可以使用派生类型名的简化形式,其效果与完整的派生类型名等价例如,可以用long代替longint,用unsignedlong代替unsignedlongint。下表

“声明符”一栏中给出的等价类型名之间用“或”字分隔82.1.2基本类型的派生类型类型声明符长度(字节)取值范围

有符号短整数short或shortint或signedshortint2-215~215-1内的整数

无符号短整数unsignedshort或unsignedshort或int20~216-1内的整数

有符号整数int或signedint4-231~231-1内的整数

无符号整数unsigned或unsignedint40~232-1内的整数

有符号长整数long或longint或signedlongint4-231~231-1内的整数

无符号长整数unsignedlong或

unsignedlongint40~232-1内的整数9C++基本数据类型及其派生类型在32位计算机上的描述(1)2.1.2基本类型的派生类型类型声明符长度(字节)取值范围

有符号字符char或signedchar1-128~127内的整数

无符号字符unsignedchar10~255内的整数

单精度数float4-3.402823*1038~3.402823*1038内的数

双精度数double8-1.7977*10308~1.7977*10308内的数

长双精度longdouble8-1.7977*10308~1.7977*10308内的数

空值void

10C++基本数据类型及其派生类型在32位计算机上的描述(2)2.2常量在程序执行过程中值不改变的量

常量有两种表示形式字面常量符号常量字面常量的类型是根据书写形式来区分的,例如15,-2.26,'a',"helloworld"等都是字面常量,它们的类型分别为:整型、浮点型、字符型、字符串类型。每个字面常量的字面本身就是它的值。符号常量是一个标识符,在程序中必须遵循“先声明,后使用”的原则。112.2.1逻辑常量逻辑类型只包含两个取值:true和false,它们称为逻辑常量例如,对于两个整型数x和y:boolb=(x==y);如果x与y相等,则b的值为true;否则b的值为false。逻辑常量主要用在逻辑运算中。由于逻辑值对应着整数1或0,所以它也能够像其它整数一样出现在表达式中,参与各种整数运算。122.2.2字符常量字符常量简称字符,它以单引号作为起止符号,中间有一个或若干个字符。单引号中间有一个字符例如,'a'和'&',特殊形式的字符常量例如'\n','\146','\x6E'等以'\'开头的包括多个字符的字符序列也都是符合规定的字符常量无论字符常量包含一个还是多个字符,每个字符常量只能表示一个字符,当字符常量的一对单引号内有多于一个的字符时,将按照一定的规则解释为一个字符。例如,'a'表示字符a,'\146'表示字符f。132.2.2字符常量转义字符用反斜线‘\’引导的下一个字符失去了原来的含义,而转义为具有某种控制功能的字符。例如,‘\n’中的字符n通过反斜线转义后成为一个换行符,其ASCII码为10,'\''表示单引号字符,直接使用'''表示单引号则不行。使用反斜线引导一个具有1至3位的八进制整数或一个以字母x(大、小写均可)作为开始标记的具有1至2位的十六进制整数,对应的字符就是以这个整数作为ASCII码的字符例如,'\0','\10','\73','\x5A'对应的字符依次为空字符,换行符,;和Z。由反斜线字符引导的符合上面规定的字符序列称为转义序列142.2.2字符常量转义序列对应值功能\a7

响铃\b8

退格\f12

换页\n10

换行\r13

回车\t9

水平制表\v11

垂直制表\\92

反斜线\'39

单引号\"34

双引号\?63

问号\oooooo的十进制值

表示八进制数\xhhhh的十进制值

表示十六进制数15C++中的字符转义序列2.2.2字符常量转义字符转义序列不但可以作为字符常量,也可以同其他字符一样出现在字符串中。例如,"abcde\n"字符串中含有六个字符,最后一个为换行符,"\tx="中的首字符为水平制表符,输出时将使光标后移8个字符位置一个字符用于显示输出时,将输出字符本身或体现出相应的控制功能;当它在表达式中参加整数运算时,将使用它的ASCII码值162.2.2字符常量例2.1字符常量的使用方式。//ex2_1.cpp#include<iostream>usingnamespacestd;intmain(){charch='H'; //语句1 intx=ch-2; //语句2 if(ch>'C') //语句3cout<<ch<<'>'<<'C'<<endl; cout<<"Thereare"<<x<<"apples.\n";//语句4return0;}172.2.2字符常量例2.1字符常量的使用方式。程序分析语句1定义字符变量ch并将字符H作为其初值,实际上是把字符H的ASCII码值72赋给了ch。语句2定义整型变量x并以表达式ch-2的值70作为其初值。语句3首先进行ch>'C'的比较,实际上是取出各自的值(即对应的ASCII码)进行比较,'H'的ASCII码值72大于'C'的ASCII码值67,因此条件成立,执行其后的输出语句,向屏幕输出H>C。语句4输出一个字符串并且使光标移到下一行的开始位置处。程序的执行结果为:H>CThereare70apples.182.2.3整型常量整型常量就是整型常数,简称整数十进制整数以正号(+)或负号(-)开头,由首位非0的一串十进制数字组成八进制整数以0开头,后面接若干个八进制数字(借用十进制数字中的0

7)。八进制整数前面不带正负号,全部默认为正数十六进制整数以数字0和字母x(大、小写均可)开头,后面接若干个十六进制数字(借用十进制数字0

9,字母A

F或a

f)。同八进制整数一样,十六进制整数也全部为正数。192.2.3整型常量添加u或者l后缀为字母u(大、小写均可),规定它为一个无符号整型(unsignedint)数后缀为字母l(大、小写均可),规定它为一个长整型(longint)数在一个整数的末尾,可以同时使用u和l,并且对排列无要求如15U,0123UL,0x1abcL,1234LU等都是整数,其类型依次为unsignedint,unsignedlongint,longint和unsigned

long

int。202.2.4实型常量实型常量简称实数,对应着数学中的实数概念。实型常量有十进制的定点表示和浮点表示两种方法。定点表示的实数简称定点数,即以小数形式表示实数定点表示的实数由一个正号或负号(正号可以省略)后接若干个十进制数字和一个小数点组成,这个小数点可以处在任何一个数字位的前面或后面。例如.12,1.2,12.,0.12,-.012等都是符合书写规定的定点数。浮点表示的实数简称浮点数,即以指数形式表示实数。点表示的实数由一个十进制整数或定点数后接一个字母e(大、小均可)和一个1至3位的十进制整数组成,字母e之前的部分称为该浮点数的尾数,之后的部分称为该浮点数的指数,该浮点数的值就是它的尾数乘以10的指数幂。例如3.23E5,+6.35e-6都是合乎规定的浮点数。212.2.4实型常量实型常量分为单精度(float)、双精度(double)和长双精度(longdouble)三类float型数据在内存中占4个字节,提供7位有效数字double型数据占8个字节,提供15位有效数字longdouble型数据占10个字节,提供19位有效数字对于一个定点数或浮点数,C++自动按一个双精度数(double型)来存储若在一个定点数或浮点数之后加上字母f(大、小写均可),则自动按一个单精度数来存储3.14和3.14f,虽然数值相同,但分别代表一个双精度数和一个单精度数-2.78E5为一个双精度数,而-2.78E5F为一个单精度数。222.2.5枚举常量枚举常量是枚举类型中定义的值,即枚举值。枚举类型属于用户定义类型,用关键字enum表示,因此又称为enum类型。用户通常利用枚举类型定义程序中需要使用的一组相关符号常量。声明枚举类型的语法格式为:enum<类型名>{<枚举值表>};enum是关键字,指出要定义的是枚举类型<类型名>是标识符,即由用户给出的具体枚举类型名<枚举值表>包含多个枚举值,它们用逗号分隔开,每个枚举值就是一个枚举常量枚举值有两种定义形式:一是<值名>;二是<值名>=<整型常量>。例如:enumcolor{RED=1,YELLOW,BLUE};232.2.5枚举常量关于enum类型有四点说明:一个enum类型实际上是int类型的一个子集,每一个枚举值代表一个整数。n个枚举值全部未赋常量值时,它们自左至右分别与整数0,1...n-1对应。若第i个枚举值赋常量值为m,则其未赋常量值的后续枚举值分别与整数m+1,m+2...对应,直到下一个赋值了的枚举值或结束。因此,为枚举值所赋的整型常量值应自左至右递增。在上面的例子中,YELLOW与整数2相对应,BLUE与整数3相对应。枚举类型的声明也可作为成组声明若干整型符号常量的方法。也就是说,把每个要声明的符号常量作为一个枚举值,将各个枚举值合在一起定义成一个枚举类型。242.2.5枚举常量由于枚举类型属于用户定义数据类型,一旦枚举类型被定义后就可以使用它来定义变量,例如:enumcolorc1,c2,c3;关键字enum可以省略,color是已经定义的枚举类型,变量c1,c2,c3的取值可以是枚举值RED,YELLOW,BLUE中的任意一个。252.3变量变量是程序中用于存储信息的单元,它对应于某个内存空间。在定义变量时,需要说明变量的名字和数据类型。这些信息告诉编译器要为变量分配多少内存空间,以及变量中要存储什么类型的值。由于变量名可以代表其存储空间,因此程序能够在变量中存储值和取出值。262.3.1变量的定义变量声明语句的一般格式为:[<存储类>]<类型名><变量名>[=<初值表达式>],...;<存储类>有四种,它们分别是auto、register、static、extern。默认的存储类为auto<类型名>为已存在的一种数据类型名称,如char等基本数据类型名,或者用户定义的数据类型名。<变量名>是用户定义的一个标识符,不能是关键字,用来表示一个变量,该变量可以通过后面的可选项赋予一个值,称为给变量赋初值。若变量名后不带有初值表达式,则变量值不确定。<初值表达式>是一个表达式,它的值就是赋予变量的初值省略号表示在一条语句中可以定义多个变量,但各变量定义之间必须用逗号分开。272.3.1变量的定义几个变量定义语句示例:inta,b;charch1='a',ch2='A';intx=a+2*b;doubled1,d2=3.14159;第一条语句定义了两个整型变量a和b;第二条语句定义了两个字符变量ch1和ch2,其初值分别为‘a’和‘A’;第三条语句定义了一个整型变量x,并将表达式a+2*b的值作为其初值;第四条语句定义了两个双精度变量,分别为d1和d2,其中d2的初值为3.14159。282.3.1变量的定义例2.2计算一个圆的周长和面积。intmain(){ doubleradius; //定义变量radius cin>>radius; //从键盘输入一个圆的半径

doublegirth=2*3.14159*radius; //计算周长表达式的值赋给变量girth doublearea=3.14159*radius*radius; //计算面积表达式的值赋给变量area cout<<"radius="<<radius<<endl; cout<<"girth="<<girth<<endl; cout<<"area="<<area<<endl; return0;}292.3.1变量的定义例2.2计算一个圆的周长和面积。程序分析在程序的主函数中,第一条语句定义了变量radius,由于没有给它赋初值,所以其值是不确定的;第二条语句从键盘输入一个常数给半径radius,输入的常数可以是整数,也可以是定点数或浮点数,系统将自动把它转换为一个双精度数后再赋值给radius;第三条和第四条语句分别计算出赋值号右边表达式的值,再分别赋初值给变量girth和area;第五至七条语句依次向屏幕输出圆的半径、周长和面积。假定程序运行后从键盘上输入的半径是1.23,则得到的输出结果为:radius=1.23girth=7.72831area=4.75291302.3.2变量的使用方式全局变量和局部变量全局变量是指在所有函数定义、类定义和程序块之外声明的变量声明全局变量时如果在程序中不对它进行专门的初始化,该变量会被系统自动初始化为0在程序的任何一个函数、类或程序块之内均可以访问全局变量局部变量是指在某个函数定义、类定义或程序块之内声明的变量。局部变量只能在声明它的函数、类或程序块中被访问312.3.2变量的使用方式例2.3全局变量和局部变量的使用。intx;intmain(){ inty; y=x+2; cout<<"y="<<y<<endl;return0;}322.3.2变量的使用方式例2.3全局变量和局部变量的使用。程序分析上述程序中的变量x是全局变量,它在所有函数和程序块之外声明,但没有进行初始化,所以系统默认地将其初始化为0。变量y是局部变量,它在main()函数中声明,因此只能在该函数中被访问。声明局部变量y时也没有进行初始化,与全局变量不同的是,系统并不给它赋默认值,没有初始化的局部变量中保存着一个不确定的值。通过表达式y=x+2可以给变量y赋值此程序的运行结果为:

y=2332.3.2变量的使用方式生存期与作用域生存期是指从一个变量被声明且分配了内存开始,直到该变量声明语句失效,它占用的内存空间被释放为止。一个全局变量的生存期从它被声明开始,直到程序结束;一个局部变量的生存期从它被声明开始,直到包含它的最近的一个程序块结束。作用域是指变量名可以代表该变量存储空间的范围。一般情况下,变量的作用域与其生存期一致,但由于C++语言允许在程序的不同部分为不同变量取同一名字,因此一个变量名的作用域可能小于其生存期。342.3.2变量的使用方式例如在下面代码段中:1intf()2{3 inta=1,b=5;4 if(b>=3)5{6 doublea=1.0;7b=2;8 }9returna;10 }35int型变量a的生存期是3~10行,double型变量a的生存期是6~8行。int型变量a的作用域却只能是3~5行和9~10行;6~8行范围内的int变量a虽然被完好地保存着,但却不能使用,即在6~8行范围内int型变量a是不起作用的。2.3.2变量的使用方式按存储分配方式的不同变量可以分为四种:auto变量:为变量声明时的默认存储类别。auto变量所占用存储空间的分配和释放工作将由系统自动完成。register变量:register变量可能以寄存器作为其存储空间。关键字register的作用只能是建议(而不是强制)系统使用寄存器。static变量:静态变量的生存期延续到整个程序的终止。与全局变量一样,为静态变量分配的存储空间在程序运行过程中不再被释放;如果未被赋初值,系统将自动为其赋初值0extern变量:变量一旦声明为外部变量,系统就不必像一般变量那样为其分配内存,因为该变量已在这一局部的外面定义。标明某一变量为外部变量可以避免为其重复分配内存。362.3.2变量的使用方式typedef类型说明使用关键字typedef可以为已有类型名定义一个新类型名。其语法格式为:typedef<已有类型名><新类型名>例如:typedefdoubleprofit;//为double定义新类型名profittypedefintinteger; //为int定义新类型名integerprofita; //等价于doublea;integerb; //等价于intb;typedef类型说明并没有真正地定义新的数据类型,它只是相当于给某个已有的数据类型起了一个别名。在规模较大的程序中为了提高代码可读性常采用这种形式。372.3.3符号常量定义语句符号常量在使用之前必须先进行定义。符号常量定义语句同变量定义语句类似,其语法格式为:const<类型名><符号常量名>=<初值表达式>,……;关键字const指明这是一条符号常量定义语句,后面跟着符号常量的类型名,接着是符号常量名,它是一个用户定义的标识符,符号常量名之后为一个赋值号和一个初值表达式。注意,必须在声明符号常量的同时为其显式赋初值。该语句也可以定义多个符号常量。系统执行符号常量定义语句时,需要依次为每个符号常量分配存储单元并赋初值。一个符号常量定义后,它的值就是定义时所赋予的初值,作为常量,这个值以后将始终保持不变若<类型名>为int,则int可省略。382.3.3符号常量定义语句几条符号常量声明语句的例子:constinta=5,b=a*4;constdoublepai=3.14159;第一条语句定义了两个整型符号常量a和b,它们的初值分别为5和20;第二条语句定义了一个双精度符号常量pai,用它表示圆周率的值3.14159。第一条语句中的int可以省略不写C++关键字中的true和false是系统预先定义的两个符号常量,它们的值分别为1和0。使用符号常量往往可以提高程序的可读性和可维护性。由于符号常量和变量同样要求系统为其分配内存单元,所以可以把符号常量视为一种不允许赋值改变的或只读不写的变量,称其为const变量。392.4运算符和表达式C++语言中的运算符又称为操作符,是用来对数据进行运算的符号,运算中需要的数据称为操作数或运算分量。由一个或多个操作数与操作符连接而成的有效运算式称为表达式。表达式还能以运算分量的角色出现在运算中从而组成新的表达式。任何表达式都有一个运算结果。402.4.1运算符和表达式的概念C++语言中的运算符可以根据其运算分量个数的多少分为单目运算符、双目运算符和三目运算符单目运算符位于运算分量之前,例如要对某个变量x取相反数可以表示为-x,这里的“-”符号就是一个单目运算符双目运算符一般位于两个运算分量之间,例如两个数a和b相加可以表示为a+b,这里的“+”号就是双目运算符三目运算符只有一个,即条件运算符“?:”,它由两个字符组成,可以分隔三个运算分量。运算符可能是一个字符,也可能由两个或三个字符组成一些运算符是C++关键字例如,加号(+)就是一个字符,逻辑与(&&)就是两个字符,左移赋值号(<<=)就是三个字符,测类型长度运算符(sizeof)就是一个C++关键字41每一种运算与其它运算的区别在于以下三个方面:参加运算的运算分量的数量和类型;运算结果的数据类型;运算的具体操作。例如,浮点型乘法运算有两个float型运算分量,运算结果为float型,具体操作为两数相乘求积;大于(>)关系运算有两个int型(或float、char型等)运算分量,运算结果为布尔类型值,具体操作为对两个运算分量进行比较。422.4.1运算符和表达式的概念2.4.2运算类型与运算符C++语言为每种允许的运算提供一种运算符例如整数加法为“+”,小于关系运算符为“<”,增量运算为“++”有些运算符可以一符多用,即一个运算符对应多种运算例如,“*”一般是作为乘法运算符,同时,它还是单目取值运算(用于指针类型)的运算符同一类运算可以组成一种运算类型,凡是具有相同运算分量和结果类型的运算划分为同一类运算,比如算术运算,关系运算,逻辑运算,位运算等。432.4.3赋值运算赋值运算是一种双目运算,其形式为:<变量名>=<表达式>右运算分量为一个表达式。“=”为赋值运算符。左运算分量为与右运算分量类型相同的变量。赋值运算的具体操作为:先计算右端表达式的值,然后把该值赋给左端变量。由赋值符号连接左端变量和右端表达式而构成的式子称为赋值表达式。每个赋值表达式都有一个值,这个值就是通过赋值得到的左端变量的值。例如,x=3*15-1的值就是通过赋值而保存在x中的值44。赋值表达式两边的数据类型不同时,在赋值前会自动把右边表达式的值转换为与左边变量类型相同的值,然后再把这个值赋给左边变量442.4.3赋值运算一些说明:在一个赋值表达式中可以使用多个赋值号实现给多个变量赋值的功能。例如,在执行x=y=z=0时就能够同时给x,y和z赋值0。赋值号也可以使用在常量和变量的声明语句中,用于给符号常量和变量赋初值。但这里的赋值号只起到赋初值的作用,并不构成赋值表达式。

C++中还有许多复合赋值运算符,它们的含义为:将右边表达式的值同左边变量的值进行相应运算后,再把这个运算结果赋给左边的变量,该复合赋值表达式的值就是保存在左边变量中的值例如,执行x+=2时,就是把x的值加上2后再赋给x,它与执行x=x+2表达式的计算是等价的,若x的值为5,则计算后得到的x的值为7,它也是这个表达式的值。452.4.3赋值运算一些说明:赋值号或复合赋值号左边必须是一个左值左值是指具有对应的可由用户访问的存储单元,并且能够由用户改变其值的量例如,一个变量就是一个左值,因为它对应着一个存储单元,并可由用户通过变量名访问和改变其值一个字面常量就不是一个左值,因为它不存在供用户访问并能改变其值的存储单元一个通过const语句定义的符号常量也不是一个左值,因为虽然用户能访问它,但不能改变它的值一般的算术表达式(如x*2+5)也不是一个左值,因为它的值只能随时被使用,不能再被访问和改变不是左值的量被称为右值。462.4.3赋值运算一些说明:一个赋值表达式的结果实际上是一个左值,即赋值号左边的变量例如,x=y-2的值就是被赋值后的x,它是一个左值,代表着对应存储单元中的值x*=y的结果也是一个左值,即x表达式(x+=5)*=2是合法的,其结果为左值x,若x的原值为2,则最后得到的x值为14472.4.4算术运算符和算术表达式算术运算是指int型、float型、double型(也包括char型)的数值类数据计算后,得到同一类型数据的运算。算术运算中使用的运算符称为算术运算符。单目算术运算符包括:-(单减)、++(增量)和--(减量)单减运算的格式为:-<运算分量>单减运算相当于对运算分量取相反数,例如:-a,-(x+y)。增量运算有两种形式。前缀增量:++<运算分量>后缀增量:<运算分量>++前缀增量和后缀增量的区别是:如果++i和i++作为表达式又参加其它运算的话,前者是先令i加1, 然后再参加其它运算;后者则是先令i参加其它运算,然后再令i加1。减量运算的格式和操作与增量运算类似。48单目算术运算符在下面各表达式中,如果int型变量x的初始值为10,则:++x //表达式的值为增1后的x值,即11x++ //x的值为11,但表达式的值仍为10y=x++ //x的值为11,y的值为10y=--x //x的值为9,y的值为9y=2*x++ //x的值为11,y的值为20492.4.4算术运算符和算术表达式双目算术运算符包括:+(加)、-(减)、*(乘)、/(除)和%(取余)它们的含义与数学上相同。该类运算的运算分量为任一种数值类型,即任一种整数类型和任一种实数类型。502.4.4算术运算符和算术表达式算术表达式由算术运算符(包括单目和双目)连接运算分量而组成的式子称为算术表达式。每个算术表达式的值为一个数值,其类型按照以下规则确定:当参加运算的两个运算分量均为整型时(但具体类型可以不同,如一个为int型,另一个为char型),则运算结果为int型。当参加运算的两个运算分量中至少有一个是单精度型,并且另一个不是双精度型时,则运算结果为float型。当参加运算的两个运算分量中至少有一个是双精度型时,则运算结果为double型。512.4.4算术运算符和算术表达式算术表达式在下面各表达式中,变量x和y的初始值分别为29和6,如果x和y为int型,则:x–y //表达式的值为23x/8 //表达式的值为3x/y+5 //表达式的值为910–x%y //表达式的值为5如果将y看成double型变量并赋值为6.0,则:x–y //表达式的值为23.0x/y //表达式的值为4.83333522.4.4算术运算符和算术表达式算术表达式若要使两个整数相除得到一个实数,则必须将其中之一强制转换为实数。例如:float(y)/24 //表达式的值为0.25x/double(-8) //表达式的值为-3.625其中float(y)和double(-8)分别表示把括号内的表达式的值强制转换为一个单精度数和双精度数。532.4.4算术运算符和算术表达式2.4.5关系运算符和关系表达式C++语言提供了六种关系运算符:<(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、!=(不等于)这六种运算符都是双目运算符,用来比较两个运算分量的大小,运算结果为逻辑型值true或false(它们分别对应着整数1和0)由一个关系运算符连接前后两个数值表达式构成的式子称为关系表达式,简称关系式。当一个关系式成立时,则计算结果为逻辑值真(true),否则为逻辑值假(false)。关系运算符的使用格式为:<运算分量><关系运算符><运算分量>542.4.6逻辑运算符和逻辑表达式C++语言提供了三种逻辑运算符:!(逻辑非)、&&(逻辑与)、||(逻辑或)其中,!为单目运算符,&&和||为双目运算符。逻辑运算符的使用格式为:<逻辑运算符!><运算分量><运算分量><逻辑运算符&&或||><运算分量>在进行逻辑运算操作时,要注意:当<运算分量>不是逻辑型时,一切以0值自动转换为false(假),一切非0值自动转换为true(真)。在输出一个逻辑值时,如不进行特殊的格式控制,true输出为1,false输出为0。55例如下面语句段:inta=1,b=2;cout<<!a<<"-----"<<!(a-b)<<endl;cout<<a&&b<<"-----"<<a&&(a-1)<<endl;cout<<a||b<<"-----"<<a||(b-2)<<endl;输出结果为:0-----01-----01-----1562.4.6逻辑运算符和逻辑表达式逻辑非是对运算分量的值取反,若运算分量的值为true(或非0),则运算结果为false,若运算分量的值为false(或0),则运算结果为true逻辑与的结果是当两个运算分量的值都为true(或非0)时,其值为true,否则为false逻辑或的结果是当两个运算分量的值都为false(或0)时,其值为false,否则为true57ab!aa&&ba||bfalse(0)false(0)truefalsefalsefalse(0)true(非0)truefalsetruetrue(非0)false(0)falsefalsetruetrue(非0)true(非0)falsetruetrue2.4.6逻辑运算符和逻辑表达式逻辑运算的运算分量是逻辑型数据逻辑常量、逻辑变量、关系表达式等都是逻辑型数据由逻辑型数据和逻辑运算符连接而成的式子称为逻辑表达式,简称逻辑式。一个数值表达式也可以作为一个逻辑型数据使用,当值为0时则认为是逻辑值false,当值为非0时则认为是逻辑值true例如,在下面各表达式中,如果int型变量x的值为2,double型变量y的值为1.25,则:x>0&&y>0 //即1&&1,表达式的值为1x&&false //即1&&0,表达式的值为0x<-10||x>10 //即0||1,表达式的值为1x++!=3||y //即0||1,表达式的值为1582.4.6逻辑运算符和逻辑表达式2.4.7位运算C++提供了六种位运算符:双目位运算符:&(按位与)、|(按位或)、^(按位异或)、>>(按位右移)、<<(按位左移)单目位运算符:~(按位取反)位运算符的使用格式为:<运算分量><双目运算符&、|、^、>>或<<><运算分量><单目运算符~><运算分量>592.4.7位运算“&”是按位与运算符,它将两个运算分量的对应二进制位进行与操作。其中,0和0与得0,0和1与得0,1和0与得0,1和1与得1。“|”是按位或运算符,它将两个运算分量的对应二进制位进行或操作。其中,0和0或得0,0和1或得1,1和0或得1,1和1或得1。“^”是按位异或运算符,它将两个运算分量的对应二进制位进行异或操作。其中,0和0异或得0,0和1异或得1,1和0异或得1,1和1异或得0。“>>”是按位右移运算符,由于右移的位数为右边运算分量的值,所以右边运算分量的值必须是一个整数。602.4.7位运算“<<”是按位左移运算符,由于左移的位数为右边运算分量的值,所以右边运算分量的值必须是一个整数。“~”是按位取反运算符,它将运算分量的对应二进制数的每一位进行取反操作。其中,0取反得1,1取反得0。612.4.7位运算例如,在下面各表达式中,如果char型变量x的二进制值为00011000(即十进制数24),char型变量y的二进制值为00100100(即十进制数36),则:x<<2 //表达式的二进制值为01100000y>>3 //表达式的二进制值为00000100~x //表达式的二进制值为11100111x&y //表达式的二进制值为00000000x|y //表达式的二进制值为00111100x^44 //表达式的二进制值为00110100622.4.8其它运算条件运算符条件运算是C++中唯一的三目运算,与其对应的运算符?:称为条件运算符。条件运算符的使用格式为:<表达式1>?<表达式2>:<表达式3>当计算由条件运算符构成的表达式时,首先计算<表达式1>,若其值非0,则计算出<表达式2>的值,并用这个值作为整个表达式的值;若<表达式1>的值为0,则计算出<表达式3>的值,并用这个值作为整个表达式的值。例如://若a>b为true则将a的值赋给x,否则将b的值赋给xx=a>b?a:b //若cnt的值为true(或非0)则输出“nonzero”,否则输出“zero”cout<<(cnt?"nonzero":"zero")632.4.8其它运算逗号运算符C++中使用逗号运算符指明对多个表达式进行顺序求值。逗号运算符的使用格式为:<表达式1>,<表达式2>,......<表达式n>其中,每个逗号都称为逗号运算符,整个式子称为逗号表达式。上述逗号表达式的求值步骤为:从左向右依次计算<表达式1>、<表达式2>...<表达式n>的值;将<表达式n>(即最右端的表达式)的值作为整个逗号表达式的值。例如,若int型变量x、y和t都已进行过声明,则:y=(t=x,x+=1,t)是一个赋值表达式,赋值运算符的右运算分量是一个逗号表达式。计算该逗号表达式时,首先将x的值赋给t,接着将x增1,最后将t的值作为整个逗号表达式的值642.4.8其它运算sizeof运算符使用运算符sizeof可以进行字长提取操作,因此sizeof运算符又称为字长提取符,它的使用格式为:sizeof(<运算分量>)其中,sizeof为关键字;<运算分量>既可以是一个类型名,也可以是一个变量名。字长提取运算的结果为一个整数,表示类型或变量的字节长度。例如,a\b都是int型变量,则:sizeof(a) //表达式的值为4sizeof(b) //表达式的值为4sizeof(int) //表达式的值为4sizeof(char) //表达式的值为1注意:得出上述结果的前提条件是,假设char型和int型变量在内存中分别占用1个和4个字节,因此在不同的机器系统上可能得到不同的结果。652.4.8其它运算圆括号运算符圆括号用于函数调用。其格式为:<函数名>(<实参表>),例如,sqrt(2),strcpy(d,s)圆括号用于强制类型转换。其格式为:(<类型名>)<表达式>例如,inta=1,b=3;cout<<a/b<<“-----“<<(double)a/b

<<endl;圆括号用于类型构造。其格式为:<类型名>(<表达式>)例如,doubled=3.25;intn=int(d); //将double型变量d构造为int型charc=char(65); //将65构造为char型变量662.4.9优先级和结合性C++语言为每一种运算符规定了相应的优先级,以确定它们在表达式中的运算顺序例如,表达式6+3*4/2-2将按照如下顺序进行计算:(1)3*4

12(2)12/2

6(3)6+6

12(4)12-2

10该表达式的最终结果值为10,这表明在C++中运算符*(乘)和/(除)的优先级高于运算符+(加)和-(减)的优先级,因此先计算乘除法,后计算加减法;另一方面,运算符*(乘)和/(除)的优先级相同(运算符+、-的优先级也相同),所以它们将按照从左向右的顺序计算。672.4.9优先级和结合性使用圆括号“(”和“)”将子表达式括起来,可以改变默认的运算符优先级。在对一个表达式求值时,首先要计算所有括号中的子表达式,再用计算的结果代替每个子表达式,然后继续计算。内层括号先于外层括号计算。例如:4*5+7*2 //表达式的值为344*(5+7*2) //表达式的值为764*((5+7)*2) //表达式的值为96682.4.9优先级和结合性运算符不仅具有优先级,还具有结合性。当优先级相同的运算符相邻地出现在一个表达式中时,是按照从左向右的顺序进行计算,还是按照从右向左的顺序进行计算,取决于运算符的结合性。例如,算术运算符是左结合的,因此下面的表达式将从左向右进行计算:a+b–c+d //左结合即先把a和b相加,然后再减去c,最后加上d。又例如,赋值运算符是右结合的,因此下面的表达式将从右向左进行计算:a=b=c=d //右结合即先把d赋值给c,然后将结果赋值给b,最后将结果赋值给a。692.4.9优先级和结合性根据运算符的优先级和结合性,可以将表达式的计算顺序规则总结为以下三条:优先计算带有括号的子表达式在没有括号的部分,依照运算符优先级,由高到低进行计算具有相同优先级的运算符,按照结合性规定,依次进行计算702.4.9优先级和结合性优先级运算符功能用法结合性1::

类域class_name::member左结合::

全局域

::name2.

成员选择

object.member左结合->

成员选择

pointer->member[]

下标

pointer[expr]()

函数调用expr(expr_list)()

类型构造type(expr_list)++

后缀增量lvalue++右结合--

后缀减量lvalue--71

温馨提示

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

评论

0/150

提交评论