第2章基本数据类型与表达式优秀PPT.ppt
第2章 基本数据类型与表达式1现在学习的是第1页,共76页2.1 C+的词法记号和标识符的词法记号和标识符2.1.1 C+字符集字符集 u英文字母英文字母:AZ,azu数字字符数字字符:09u特殊字符特殊字符:+-*/%=!#&|_ “;.,()空格空格2现在学习的是第2页,共76页2.1.2 关键字关键字 u什么是关键字?什么是关键字?预先定义好的标识符,预先定义好的标识符,C+编译器对其进编译器对其进行特殊处理。行特殊处理。u如何识别关键字?如何识别关键字?使用使用VC+6.0的编辑环境时,缺省是的编辑环境时,缺省是蓝色蓝色的字符即为关键字。的字符即为关键字。3现在学习的是第3页,共76页2.1.3 标识符标识符 标标识识符符是是程程序序员员声声明明的的单单词词,它它命命名名程程序序正正文文中中的的一一些些实实体体,如如函函数数名名、变变量量名名、类类名名和和对对象象名名等等。C+标识符的构成规则如下:标识符的构成规则如下:(1)不能是不能是C+的关键字;的关键字;(2)第一个字符必须是字母或下划线;第一个字符必须是字母或下划线;(3)其他字符只能是字母、下划线或数字;其他字符只能是字母、下划线或数字;(4)为了方便输入,长度一般不超过为了方便输入,长度一般不超过31个字符。个字符。4现在学习的是第4页,共76页合法的标识符:合法的标识符:apple、_Student、_123、No1、max_num不合法的标识符:不合法的标识符:51job、maxnum、-abc注意:注意:C+的表示符是大小写敏感的,即的表示符是大小写敏感的,即abcABC。5现在学习的是第5页,共76页2.1.4 分隔符分隔符 分分隔隔符符用用于于分分隔隔程程序序中中的的正正文文,在在C+中中使使用用下下列列字字符作为分隔符:符作为分隔符:(),:;这这些些分分隔隔符符不不表表示示实实际际的的操操作作,仅仅用用于于构构造造程程序序。比如比如“;”,用来作为一句完整语句的结束。,用来作为一句完整语句的结束。2.1.5 空白空白 在在C+语语句句中中经经常常出出现现空空白白(制制表表符符、空空格格、空空行行)等,通常都忽略不计。等,通常都忽略不计。6现在学习的是第6页,共76页2.2 基本数据类型基本数据类型什么是数据类型?什么是数据类型?数据是程序处理的对象,数据根据其本身的特数据是程序处理的对象,数据根据其本身的特点进行分类,从而形成不同的数据类型。点进行分类,从而形成不同的数据类型。例如:数学中有自然数、整数、实数例如:数学中有自然数、整数、实数基本数据类型基本数据类型整型:整型:int字符型:字符型:char、wchar_t实型:实型:float、double逻辑型:逻辑型:bool7现在学习的是第7页,共76页自定义数据类型自定义数据类型数组:数组:type 指针:指针:type*引用:引用:type&空类型:空类型:void结构:结构:struct联合:联合:union枚举:枚举:enum类:类:class8现在学习的是第8页,共76页修饰符?修饰符?在在C+中描述为了更加准确的描述数据类型,提中描述为了更加准确的描述数据类型,提供了供了4个关键字用来修饰基本的数据类型:个关键字用来修饰基本的数据类型:1、长型、长型long 2、短型、短型short 3、有符号、有符号signed4、无符号、无符号unsigned1、short:仅用来修饰仅用来修饰int,称为短整型,占,称为短整型,占2字节内存,也可字节内存,也可直接简写为直接简写为short;9现在学习的是第9页,共76页2、long:仅修饰仅修饰int和和double,因为在不同的编译环境,因为在不同的编译环境中使用中使用long修饰的数据所占内存不同,这里列修饰的数据所占内存不同,这里列出的是在出的是在VC+6.0的环境下的。的环境下的。3、unsigned:用来修饰用来修饰char、short和和int,表示该数据类型为,表示该数据类型为无符号数。无符号数。4、signed:用来修饰用来修饰char、short和和int,表示该数据类,表示该数据类型为有符号数,为缺省设置。型为有符号数,为缺省设置。10现在学习的是第10页,共76页数据类型和内存空间数据类型和内存空间 不同的数据类型,加上不同的修饰符就具有不同的数据类型,加上不同的修饰符就具有了不同的特点,在内存中占用的空间也不同,因了不同的特点,在内存中占用的空间也不同,因而其所能表示的数值范围也不尽相同。而其所能表示的数值范围也不尽相同。内存单元的单位是字节,因此用来表示数据类内存单元的单位是字节,因此用来表示数据类型的长度的单位也是字节。型的长度的单位也是字节。注意注意:整型整型int的长度等于机器的字长:的长度等于机器的字长:16位机:位机:int=2字节;字节;32位机:位机:int=4字节。字节。但是但是short和和long表示的数据长度是固定的,任表示的数据长度是固定的,任何支持标准何支持标准C+的编译器都是如此,因而如果需要编写的编译器都是如此,因而如果需要编写可移植性好的程序,应将整型声明为可移植性好的程序,应将整型声明为short或或long。11现在学习的是第11页,共76页数据类型标识符数据类型标识符字节数字节数数值范围数值范围常量写法举例常量写法举例char1-128127A,0,nsigned char1-12812756unsigned char10255100short int2-3276832767100signed short int2-3276832767-3456unsigned short int20655350 xffint4-214748364821474836471000signed int4-21474836482147483647-123456unsigned int4042949672950 xffffC+的基本数据类型的基本数据类型 12现在学习的是第12页,共76页数据类型标识符数据类型标识符字节数字节数数值范围数值范围常量写法举例常量写法举例long int4-2147483648 2147483647-123456signed long int4-2147483648 2147483647-3246unsigned long int 404294967295123456float4(3.4E-383.4E38)2.35,-53.231,3E-2 double8(1.7E-3081.7E30812.354,-2.5E10long double10(1.2E-493 21.2E4932)8.5E-300C+的基本数据类型的基本数据类型 13现在学习的是第13页,共76页例题例题:编写一个程序,输出基本数据类型编写一个程序,输出基本数据类型char,int,float,double,bool的长度。的长度。/输出基本数据类型的长度输出基本数据类型的长度#include using namespace std;void main()cout“char:”sizeof(char)“字节字节n;coutint:sizeof(int)字节字节n;coutfloat:sizeof(float)字节字节n;coutdouble:sizeof(double)字节字节n;coutbool:sizeof(bool)字节字节n;14现在学习的是第14页,共76页2.3 变量和常量变量和常量2.3.1 变量变量 程程序序所所处处理理的的数数据据不不仅仅分分为为不不同同的的数数据据类类型型,而而且且每每种种类类型型的的数数据据还还分分为为变变量量和和常常量量。程程序序在在运运行行中中就就是是通过这些变量和常量来操作数据的。通过这些变量和常量来操作数据的。什么是变量?什么是变量?在在C+中,变量是存储信息的地方。变量的实质是内中,变量是存储信息的地方。变量的实质是内存中的一个地址空间,在这个地址空间中可以进行数据的存中的一个地址空间,在这个地址空间中可以进行数据的存储和读取。存储和读取。15现在学习的是第15页,共76页变量定义的格式:变量定义的格式:数据类型数据类型 变量名变量名1,变量名,变量名2,变量名变量名n;例如:定义各种类型的变量例如:定义各种类型的变量 int num;float f;char ch;short s;double area,length;说明:说明:在创建或定义变量时,需要指明该变量在创建或定义变量时,需要指明该变量的的数据类型数据类型和和名称名称。16现在学习的是第16页,共76页数据类型:决定变量的存储方式和可以进行的操作;数据类型:决定变量的存储方式和可以进行的操作;变量名称的定义遵循标识符定义的规则,实际上变量变量名称的定义遵循标识符定义的规则,实际上变量名称就是其中一种标识符。常用的命名约定有三种:名称就是其中一种标识符。常用的命名约定有三种:变量名称:用来区分不同的变量。变量名称:用来区分不同的变量。变量一旦被定义,则系统自动为其分配应占的内存。变量一旦被定义,则系统自动为其分配应占的内存。1、Unix环境常用的命名法环境常用的命名法 my_age、num_of_student 2、驼峰式命名法、驼峰式命名法 myAge、numOfStudent17现在学习的是第17页,共76页 3、匈牙利标记法、匈牙利标记法 iMyCar、ipMyCar、bIsRight例如:例如:unsigned short age;age=18;或者或者 unsigned short age=18;给变量赋值给变量赋值使用赋值运算符使用赋值运算符“=”可以将一个值赋给变量。可以将一个值赋给变量。特性:特性:变量可以被多次赋值,但每次赋值后,原值都变量可以被多次赋值,但每次赋值后,原值都会被新值覆盖。会被新值覆盖。18现在学习的是第18页,共76页例例2.2:赋值运算符的使用:赋值运算符的使用#include using namespace std;void main()intmyAge=18;cout“myAge=”myAgeendl;myAge=20;cout“myAge=”myAgeendl;运行结果:运行结果:myAge=18myAge=2019现在学习的是第19页,共76页例如:例如:typedef unsigned int UINT;UINT a,b,c;typedef为已有的数据类型定义一个同义词,或者叫做别名。为已有的数据类型定义一个同义词,或者叫做别名。注意:注意:使用使用typedef定义同义词时并不分配内存空定义同义词时并不分配内存空间。间。typedef 原类型名原类型名 新类型名新类型名;与与 unsigned int a,b,c;效果完全相同。效果完全相同。20现在学习的是第20页,共76页2.3.2 常量常量 1.符号常量符号常量代表一个固定不变值的名字;代表一个固定不变值的名字;严格来说,常量又分成符号常量和常数。严格来说,常量又分成符号常量和常数。C+中提供了一个关键字中提供了一个关键字const,用来区分常量和变,用来区分常量和变量。并且由于常量代表一个固定的值,并且该值在程序量。并且由于常量代表一个固定的值,并且该值在程序运行过程中不能够被改变,所以要求运行过程中不能够被改变,所以要求常量在定义的时候常量在定义的时候必须进行初始化必须进行初始化。const 数据类型数据类型 常量名常量名=常量值常量值;const float PI=3.14159;21现在学习的是第21页,共76页define关键字关键字在在C语言中使用预编译指令语言中使用预编译指令#define也能够定义常量。也能够定义常量。该语句属于预编译指令,不属于该语句属于预编译指令,不属于C+语句,因而行语句,因而行尾不需要使用分号。并且由于尾不需要使用分号。并且由于C+是向下兼容的,因而是向下兼容的,因而C语言的程序能够在语言的程序能够在C+的编译器下顺利运行。的编译器下顺利运行。但是在但是在C+编程中,建议使用编程中,建议使用const替代替代#define定义常量。定义常量。#define PI 3.1415922现在学习的是第22页,共76页2.整型常数整型常数十进制数:十进制数:100 整型常数可以用后缀字母表示类型。如:整型常数可以用后缀字母表示类型。如:用用U或或u表示无符号整型,如表示无符号整型,如65535U。默认的是默认的是int型。型。八进制数:八进制数:0144十六进制数:十六进制数:0 x64 说明说明:在:在C+中,十进制数有正负之分,但八进制数中,十进制数有正负之分,但八进制数和十六进制数只能表示无符号数。和十六进制数只能表示无符号数。用用L或或l表示长整型。表示长整型。23现在学习的是第23页,共76页3.实型常数实型常数小数形式:小数形式:0.123、23.12 整型常数可以用后缀字母表示类型。如:整型常数可以用后缀字母表示类型。如:可用后缀可用后缀F(f)表示实数常数为)表示实数常数为float型。型。默认的是默认的是double型。型。指数形式:指数形式:123e5或或123E5注意注意:e前面必须有数字,前面必须有数字,e后面必须是整数后面必须是整数用用L或或l表示表示long double型。型。24现在学习的是第24页,共76页4.字符常数字符常数(1)、用单引号扩起来的一个字符。、用单引号扩起来的一个字符。除此以外,还有一些不可显示的特殊字符,如:除此以外,还有一些不可显示的特殊字符,如:a?(2)、转义字符、转义字符 以以开头的字符序列,代表特殊的意义。开头的字符序列,代表特殊的意义。n t ”25现在学习的是第25页,共76页 反斜杠还可以和八进制数或十六进制结合起来表示反斜杠还可以和八进制数或十六进制结合起来表示相应的相应的ASCII码。表示形式如下:码。表示形式如下:ddd 13位八进制数位八进制数 xhh 12位十六进制数位十六进制数 char ch1=a,ch2=97,ch3=064;原因:原因:在内存中,字符数据以在内存中,字符数据以ASCII码存储,码存储,即以整数表示,所以,即以整数表示,所以,C+中字符数据和整数可中字符数据和整数可以相互赋值。以相互赋值。字符变量:字符变量:26现在学习的是第26页,共76页例:字符数据和整型数据的转换例:字符数据和整型数据的转换#include using namespace std;void main()int n=a;char ch=97;cout”输出内容:输出内容:”nendl;cout”输出内容:输出内容:”chendl;运行结果:运行结果:输出内容:输出内容:97输出内容:输出内容:a注注意意:变变量量在在输输出出时时,根根据据其其本本身身的的数数据据类类型型进进行行输出。输出。27现在学习的是第27页,共76页5.字符串常量字符串常量由一对双引号括起来的字符序列。由一对双引号括起来的字符序列。“how do you do?”“hello world!”注意:没有字符串变量。注意:没有字符串变量。可用字符数组实现。可用字符数组实现。28现在学习的是第28页,共76页思考:思考:字符串字符串“x07Operatingtsystem”有几个有几个字符?显示结果如何?字符?显示结果如何?6.逻辑型常数逻辑型常数 逻辑型常数只有两个:逻辑型常数只有两个:false(假)和(假)和true(真)。(真)。在显示器上显示为在显示器上显示为0和和1。29现在学习的是第29页,共76页2.4 运算符和表达式运算符和表达式程程序序中中对对数数据据进进行行的的各各种种运运算算是是由由运运算算符符来来决决定定的的,不不同同运运算算符符的的运运算算方方法法和和特特点点是是不不同同的的,从从此此可可以以看看出出,一一个个运运算算式式子子中中要要涉涉及及到到数数据据及及运运算算符符,而而运运算算符是对数据进行指定操作,并产生新值的特殊符号。符是对数据进行指定操作,并产生新值的特殊符号。2.4.1 表达式表达式在在C+语语言言中中将将变变量量、常常量量和和运运算算符符有有机机结结合合在在一一起起组组成成的的就就是是表表达达式式,利利用用表表达达式式C+可可以以进进行行复复杂杂的运算和处理。的运算和处理。定义:表达式是定义:表达式是操作符操作符、操作数操作数和和标点符号标点符号组成的序组成的序列。并且总能返回一个值,作为表达式的结果。列。并且总能返回一个值,作为表达式的结果。30现在学习的是第30页,共76页 3.2 /简单表达式,值为简单表达式,值为3.2 2+3 /常量表达式,值为常量表达式,值为5 a /简单表达式,值为变量简单表达式,值为变量a的值的值 x=(a+b)*c;/较为复杂的表达式较为复杂的表达式表表达达式式是是可可以以嵌嵌套套的的,比比如如y=x=a+b,该该表表达达式式先先将将a和和b进进行行相相加加,然然后后将将结结果果赋赋值值给给x,再再将将x=a+b的的值值赋给赋给y。2.4.2 语句和块语句和块C+中中所所有有的的操操作作运运算算都都通通过过表表达达式式来来实实现现。由由表表达达式式和和结结尾尾的的“;”组组成成一一个个C+语语句句;多多条条C+语语句句通通过过大大括号括号 括起来,组成一个块语句,例:括起来,组成一个块语句,例:31现在学习的是第31页,共76页一般来说属于同一个逻辑关系的多条语句组成块语句。一般来说属于同一个逻辑关系的多条语句组成块语句。2.4.3 运算符运算符运算符具有运算符具有优先级优先级和和结合性结合性。优优先先级级:级级别别高高的的先先运运算算,级级别别低低的的后后运运算算。例例如如:*/高于高于+-结结合合性性:自自左左向向右右结结合合还还是是自自右右向向左左结结合合。例例如如:1+2+3,+自左向右结合。自左向右结合。int temp=x;x=y;y=temp;32现在学习的是第32页,共76页33现在学习的是第33页,共76页根据运算符对操作数的要求不同,分成:根据运算符对操作数的要求不同,分成:一元运算符:一元运算符:仅需要一个操作数的运算符,例如仅需要一个操作数的运算符,例如+等等二二元元运运算算符符:需需要要两两个个操操作作数数的的运运算算符符,例例如如:+、-、*、/等,等,形如形如“操作数操作数1 运算符运算符 操作数操作数2”三三元元运运算算符符:需需要要三三个个操操作作数数的的运运算算符符,只只有有条条件件运运算算符符“?:”。赋值运算符赋值运算符(1)赋值运算符就是赋值运算符就是“=”例如:例如:float f=3.15(2)左值左值:可以合法的放在:可以合法的放在“=”左边的操作数左边的操作数 右值右值:可以合法的放在:可以合法的放在“=”右边的操作数右边的操作数常量都是右值,所以不能够放在常量都是右值,所以不能够放在“=”的左边被赋值;的左边被赋值;变量既是左值又是右值,可以放在任何位置。变量既是左值又是右值,可以放在任何位置。34现在学习的是第34页,共76页算术运算符算术运算符C+提供的算术运算符包括提供的算术运算符包括“+-*/%+-”(1)二元运算符:二元运算符:+(加加)-(减减)*/%(2)一元运算符:一元运算符:+(正号正号)-(负号负号)+-注意:注意:(1)“/”根据操作数不同,运算规律也不同根据操作数不同,运算规律也不同:整型数为整除运算:例如整型数为整除运算:例如5/2=2;浮点数为通常意义的除法:即浮点数为通常意义的除法:即5.0/2.0=2.5。(2)“%”取余数运算符,只能对整型数进行操作,不取余数运算符,只能对整型数进行操作,不允许对浮点数进行操作。允许对浮点数进行操作。35现在学习的是第35页,共76页C+中提供了两个特殊的运算符:中提供了两个特殊的运算符:+、-表表示将操作数加示将操作数加1、减、减1。+、-运算符根据操作数的位置不同,又称运算符根据操作数的位置不同,又称为前置(为前置(+i)和后置和后置(i+)1、前置(、前置(+i):):先自身加先自身加1,然后再将加,然后再将加1的值作为(的值作为(+i)表达式的值;表达式的值;2、后置(、后置(i+):):将将i作为(作为(i+)表达式的值,然后自身再加)表达式的值,然后自身再加1。36现在学习的是第36页,共76页复合赋值运算符复合赋值运算符在在C+中中可可以以将将算算术术运运算算符符和和赋赋值值运运算算符符结结合合在在一一起起进进行行运运算算,因因此此C+还还提提供供5种种复复合合的的赋赋值值运运算符算符+=,-=,*=,/=和和%=。例如:例如:x+=y 相当于相当于x=x+y x-=y 相当于相当于x=x-y x*=y 相当于相当于x=x*y x/=y 相当于相当于x=x/y x%=y 相当于相当于x=x%y37现在学习的是第37页,共76页运行结果为:运行结果为:2238现在学习的是第38页,共76页39现在学习的是第39页,共76页(1+x)/(3*x)(2*x-3)*x+2)*x)-53.14*sqrt(r)b*b-4.0*a*c注意注意:(1)表表达达式式中中的的括括号号不不管管有有多多少少层层,一一律律使使用用圆圆括号。括号。(2)在在将将一一个个数数学学上上的的运运算算式式子子写写成成对对应应的的C+的表达式时,要的表达式时,要注意注意进行必要的转换。进行必要的转换。乘号不能省略。乘号不能省略。数数学学表表达达式式中中出出现现的的数数学学运运算算函函数数要要用用C+提提供供的对应的数学运算库函数来代替。的对应的数学运算库函数来代替。40现在学习的是第40页,共76页关系运算符和关系表达式关系运算符和关系表达式 关关系系运运算算符符就就是是对对两两个个量量之之间间进进行行比比较较的的运运算算符符,如下表所示。如下表所示。关系运算符关系运算符含义含义例子例子10=小于或等于小于或等于(x+y)*2大于大于x+yz=大于或等于大于或等于x-y=a*b+2=等于等于x+y=a+b!=不等于不等于x-y!=041现在学习的是第41页,共76页 由由关关系系运运算算符符将将两两个个表表达达式式连连接接形形成成的的运运算算式式子子是是关关系系表表达达式式,一一个个关关系系表表达达式式的的值值是是一一个个逻逻辑辑值值,当当为为真真时,值为时,值为1,为假时,值为,为假时,值为0。如:假设如:假设a=1,b=20,c=3,则,则ab/表达式成立,其值为表达式成立,其值为1b=c/表达式不成立,其值为表达式不成立,其值为0(a+b)!=c/表达式成立,其值为表达式成立,其值为11221 /表达式不成立,其值为表达式不成立,其值为0注意注意:在在对对两两个个表表达达式式的的值值进进行行是是否否相相等等的的比比较较时时,要要用用运运算算符符“=”,而不能写成,而不能写成“=”。42现在学习的是第42页,共76页逻辑运算符和逻辑表达式逻辑运算符和逻辑表达式 逻逻辑辑运运算算符符是是对对两两个个逻逻辑辑量量间间进进行行运运算算的的运运算算符符,如如下表所示。下表所示。逻辑运算符逻辑运算符含义含义例子例子!逻辑非逻辑非!(x10)&逻辑与逻辑与(i1)&(ic)的的值值为为1(真)。(真)。(2)在在逻逻辑辑表表达达式式的的求求值值过过程程中中,并并不不是是所所有有的的逻逻辑辑运运算算符符都都被被执执行行,只只是是在在必必须须执执行行下下一一个个逻逻辑辑运运算算符符才才能能求求出出表表达达式的值时,才执行该运算符。式的值时,才执行该运算符。a&b&c 只只有有a为为真真时时,才才需需要要判判别别b的的值值,只只有有a和和b的的值值都都为为真真时时才才需需要要判判别别c的的值值。如如:int i=10;则则表表达达式式i&(i=0)&(+i)的的值值为为0(假假),该该表表达达式式运运算结束后,变量算结束后,变量i的值为的值为0,而不是,而不是1。45现在学习的是第45页,共76页 a|b|c 只只要要a为为真真,就就不不必必须须判判断断b和和c;只只有有a为为假假,才才判判别别b;a和和b 都都为为假假才才判判别别c。如如:int i=1,j;则则表表达达式式i+|i+|i+的的值值为为1(真真),运运算算结结束束后后,变变量量i的的值值为为2,而不是,而不是4。对对于于数数学学上上的的表表示示多多个个数数据据间间进进行行比比较较的的表表达达式式,在在C或或C+中中要要拆拆写写成成多多个个条条件件并并用用逻逻辑辑运运算算符符连连接接形形成成一一个个逻逻辑辑表表达达式式。如如:在在数数学学上上,要要表表示示一一个个变变量量a的的值值处处于于-1和和-9之之间间时时,可可以以用用-9a-9&a-1,而而不不能能写写成成-9a-1。因因为为,假假设设变变量量a当当前前的的值值为为-5,它它的的值值确确实实处处在在-1和和-9之之间间,但但在在C+语语言言中中求求-9a-1时时,从从左左向向右右进进行行计计算算,先先计计算算-9a,得得1(真真),此此时时该该表表达达式式可可简简化化为为1-9&ab?a:b的值为的值为4。位运算符位运算符1位运算符及其运算规则位运算符及其运算规则 所所谓谓位位运运算算符符是是指指能能进进行行二二进进制制位位运运算算的的运运算算符符。C+提供的位运算符如下表所示。提供的位运算符如下表所示。47现在学习的是第47页,共76页位运算的运算规则为:位运算的运算规则为:(1)按按位位与与&:两两个个运运算算量量相相应应的的位位都都是是1,则则该该位位的的结果值为结果值为1,否则为,否则为0;(2)按按位位或或|:两两个个运运算算量量相相应应的的位位只只要要有有一一个个是是1,则该位的结果值为则该位的结果值为1,否则为,否则为0;运算符运算符含义含义例子例子&按位与按位与i&128|按位或按位或j|64按位异或按位异或j12按位取反按位取反j按位左移按位左移i按位右移按位右移j248现在学习的是第48页,共76页(3)按按位位异异或或:两两个个运运算算量量相相应应的的位位不不同同,则则该该位位的的结果值为结果值为1,否则为,否则为0;(4)按位取反)按位取反:将运算量的每一位取反。:将运算量的每一位取反。(5)按按位位左左移移:将将操操作作数数中中的的每每一一位位向向右右移移动动指指定定的的位位数数,移移出出的的位位被被舍舍弃弃,空空出出的的位位补补0或或补补符号位。符号位。如:如:a=5,b=6,则:,则:a00000101 00000101 00000101b&00000110 00000110 00000110 0000011000000100000001110000001111111001即:即:a&b=4,a|b=7,ab=3,b=249。49现在学习的是第49页,共76页2复合位运算符复合位运算符 位位运运算算符符与与赋赋值值运运算算符符结结合合可可以以形形成成复复合合位位运运算算符,如下表所示。符,如下表所示。运算符运算符例子例子等价形式等价形式&=x&=y+zx=x&(y+z)|=x|=x+2x=x|(x+2)=x=yx=xy=x=y+zx=x=x=y+zx=x(y+z)50现在学习的是第50页,共76页逗号运算符逗号运算符 逗号运算符的运算优先级是最低的。一般形式为:逗号运算符的运算优先级是最低的。一般形式为:表达式表达式1,表达式,表达式2,表达式,表达式N 在在计计算算逗逗号号表表达达式式的的值值时时,按按从从左左至至右右的的顺顺序序依依次次分分别别计计算算各各个个表表达达式式的的值值,而而整整个个逗逗号号表表达达式式的值和类型是由最右边的表达式决定。的值和类型是由最右边的表达式决定。如:有语句如:有语句int a=3,b=4;则表达式;则表达式a+,b+,a+b的值为的值为9。再再如如:设设有有int i;则则表表达达式式i=1,i+=2?i+1:i+4的的值值为为6。51现在学习的是第51页,共76页强制类型转换运算符强制类型转换运算符 该该运运算算符符的的功功能能是是将将某某一一数数据据从从一一种种数数据据类类型型向向另另一一种数据类型进行转换。其使用的一般形式:种数据类型进行转换。其使用的一般形式:数据类型标识符数据类型标识符(表达式)(表达式)(数据类型标识符)表达式(数据类型标识符)表达式如:如:int i=2;float a,b;a=float(i);/将将变变量量i的的类类型型强强制制转转换换为为浮浮点点型型,并并将其值赋给变量将其值赋给变量ab=(float)i;/将将变变量量i的的类类型型强强制制转转换换为为浮浮点点型型,并并将其值赋给变量将其值赋给变量b52现在学习的是第52页,共76页运算符的优先级与结合性运算符的优先级与结合性 每每个个运运算算符符都都有有自自己己优优先先级级和和结结合合性性。当当一一个个表表达达式式中中包包含含多多个个运运算算符符时时,要要确确定定运运算算的的结结果果,必必须须首首先先确确定定运运算算的的先先后后顺顺序序,即即运运算算符符的的优优先先级级和和结结合合性性。C+中运算符的优先级和结合性如下表所示。中运算符的优先级和结合性如下表所示。53现在学习的是第53页,共76页优先级优先级运算符运算符结合性结合性1()():-.*-*自左至右自左至右2!+-+-*&(类型类型)sizeof new delete自右至左自右至左3*/%自左至右自左至右4+-自左至右自左至右5自左至右自左至右6 =自左至右自左至右7=!=自左至右自左至右8&自左至右自左至右9自左至右自左至右10|自左至右自左至右11&自左至右自左至右12|自左至右自左至右13?:自右至左自右至左14=+=-=*=/=%=&=|=自右至左自右至左15,自左至右自左至右C+中运算符的优先级和结合性中运算符的优先级和结合性 54现在学习的是第54页,共76页 在在C+语语言言中中,数数据据的的输输入入和和结结果果的的输输出出是是分分别别使使用用系系统统所所提提供供的的输输入入流流对对象象cin和和输输出出流流对对象象cout来来完完成成的的。在在使使用用过过程程中中,只只要要在在程程序序的的开开头头嵌嵌入入相相应应的的头头文文件件“iostream.h”即可。即可。数据的输出数据的输出cout 输出流对象输出数据的语句格式为:输出流对象输出数据的语句格式为:cout数据数据1数据数据2数据数据n;说明:说明:(1)cout是是系系统统预预定定义义的的一一个个标标准准输输出出设设备备(一一般般代代表表显显示示器器);“”是是输输出出操操作作符符,用用于于向向cout输输出出流流中中插插入数据。入数据。(2)cout的的作作用用是是向向标标准准输输出出设设备备上上输输出出数数据据,被被输输出出的数据可以是常量、已有值的变量或是一个表达式。的数据可以是常量、已有值的变量或是一个表达式。2.5 基本输入输出基本输入输出55现在学习的是第55页,共76页如:如:#include#include void main()float a=3,b=4;cout The result is:;coutsqrt(a*a+b*b)endl;该程序的输出结果为:该程序的输出结果为:The result is:5(3)可以在)可以在cout输出流中插入输出流中插入C+中的转义字符。如:中的转义字符。如:cout the value of a:n;couta;56现在学习的是第56页,共76页表表示示输输出出完完字字符符串串Input the value of a:后后,在在下下一一行行输输出出变量变量a的值。的值。(4)可可以以将将多多个个被被输输出出的的数数据据写写在在一一个个cout中中,各各输输出出项项间间用用“”操操作作符符隔隔开开即即可可,但但要要注注意意cout首首先先按按从从右右向向左左的的顺顺序序计计算算出出各各输输出出项项的的值值,然然后后再再输输出出各各项项的的值值。如如:cout value of a:a value of b:b The result is:sqrt(a*a+b*b);再再如如:设设变变量量i的的值值为为10,则则couti,i+,i+;的输出结果为:的输出结果为:12,11,10(5)一一个个cout语语句句也也可可拆拆成成若若干干行行书书写写,但但注注意意语语句句结结束束符符“;”只只能能写写在在最最后后一一行行上上。如如:对对于于上上面面的的语语句句也也可写成如下形式:可写成如下形式:57现在学习的是第57页,共76页cout value of a:/注意行末无分号注意行末无分号 a value of b:b The result is:sqrt(a*a+b*b);/在此处书写分号在此处书写分号(6)在在cout中中,实实现现输输出出数数据据换换行行功功能能的的方方法法:既既可可使使用用转转义义字字符符“n”,也也可可使使用用表表示示行行结结束束的的流流操操作作子子endl。如:如:coutThis is first Line.nThis is second line.;上面语句可等价地写为:上面语句可等价地写为:coutThis is first Line.endlThis is second line.;58现在学习的是第58页,共76页(7)在在cout中中还还可可以以使使用用流流控控制制符符控控制制数数据据的的输输出出格格式式,但但使使用用这这些些流流控控制制符符时时,要要在在程程序序的的头头上上嵌嵌入入头头文文件件#include。常常用用的的流流控控制制符符及及其其功功能能如如g下下表所示。表所示。I/O流的常用控制符流的常用控制符控制符控制符功能功能dec十进制数输出十进制数输出hex十六进制数输出十六进制数输出oct八进制数输出八进制数输出setfill(c)在给定的输出域宽度内填充字符在给定的输出域宽度内填充字符csetprecision(n)设显示小数精度为设显示小数精度为n位位setw(n)设域宽为设域宽为n个字符个字符setiosflags(ios:fixed)固定的浮点显示固定的浮点显示59现在学习的是第59页,共76页setiosflags(ios:scientific)指数显示指数显示setiosflags(ios:left)左对齐左对齐setiosflags(ios:right)右对齐右对齐setiosflags(ios:skipws)忽略前导空白忽略前导空白setiosflags(ios:uppercase)十六进制数大写输出十六进制数大写输出setiosflags(ios:lowercase)十六进制数小写输出十六进制数小写输出setiosflags(ios:showbase)按按十十六六八八进进制制输输出出数数据据时时,前前面面显示前导符显示前导符0 x;60现在学习的是第60页,共76页 设置域宽设置域宽:所谓域宽就是被输出数据所占的输出宽度:所谓域宽就是被输出数据所占的输出宽度(单位是字符数)。设置域宽可以使用流控制符(单位是字符数)。设置域宽可以使用流控制符setw(n)和和cout的方法的方法cout.width(n)其中其中n为正整数,表示域宽。但是,为正整数,表示域宽。但是,cout.width(n)和和setw(n)二者都只对下一个被输出的数据有作用,若一个输二者都只对下一个被输出的数据有作用,若一个输出语句内有多个被输出的数据,而要保持一定格式域宽时,出语句内有多个被输出的数据,而要保持一定格式域宽时,需要在每一输出数据前加上需要在每一输出数据前加上cout.width(n)或或setw(n)。此外,当参数此外,当参数n的值比实际被输出数据的宽度大时,则的值比实际被输出数据的宽度大时,则在给定的域宽内,数据靠右输出,不足部分自动填充空格在给定的域宽内,数据靠右输出,不足部分自动填充空格符;若被输出数据的实际宽度比符;若被输出数据的实际宽度比n值大时,则数据所占的实值大时,则数据所占的实际位数输出数据,设置域宽的参数际位数输出