版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2022-2-221C+高级语言程序设计高级语言程序设计第第2 2章章 基本数据类型与表达式基本数据类型与表达式北京邮电大学信息与通信工程学院北京邮电大学信息与通信工程学院北京邮电大学信息与通信工程学院2022-2-222程序中最基本的要素是数据类型,根据数据类型可以为变量或常量分配内存空间,将变量、常量和运算符结合在一起组成表达式,进行复杂的运算和处理。北京邮电大学信息与通信工程学院2022-2-22-3-第第2 2章章 基本数据类型与表达式基本数据类型与表达式2.1 2.1 词法记号和标识符词法记号和标识符2.2 2.2 基本数据类型基本数据类型2.3 2.3 变量和常量变量和常量2.4
2、2.4 运算符和表达式运算符和表达式2.5 2.5 基本输入输出基本输入输出2.6 2.6 使用使用stringstring类型处理字符串类型处理字符串北京邮电大学信息与通信工程学院2022-2-22-4-2.1 2.1 词法记号和标识符词法记号和标识符北京邮电大学信息与通信工程学院2.1 2.1 词法记号和标识符词法记号和标识符C+字符集英文字母:AZ,az数字字符:09特殊字符: + - * / % = ! # & | _ “ ; . , ( ) 空格2022-2-22-5-北京邮电大学信息与通信工程学院2.1 2.1 词法记号和标识符词法记号和标识符C+关键字什么是关键字? 预先
3、定义好的标识符,C+编译器对其进行特殊处理。如何识别关键字? 使用VC2005的编辑环境时,缺省是蓝色的字符即为关键字。2022-2-22-6-北京邮电大学信息与通信工程学院2.1 2.1 词法记号和标识符词法记号和标识符标识符 标识符是程序员声明的单词,它命名程序正文中的一些实体,如函数名、变量名、类名、对象名等。C+标识符的构成规则如下: 2022-2-22-7- 1、不能是C+的关键字; 2、第一个字符必须是大写、小写字母或下划线; 3、不包含空格和“+、-、;”等特殊字符; 4、为方便输入,长度一般不超过31个字符。北京邮电大学信息与通信工程学院2.1 2.1 词法记号和标识符词法记号
4、和标识符 例如: 合法的标识符: apple、_Student、_123、No1、max_num 不合法的标识符: 51job、max num、-abc 2022-2-22-8-注意: C+的标识符是大小写敏感的,即abcABC。北京邮电大学信息与通信工程学院2.1 2.1 词法记号和标识符词法记号和标识符分隔符 分隔符用于分隔程序中的正文,在C+中使用下列字符作为分隔符: ( ) ,:; 这些分隔符不表示实际的操作,仅用于构造程序。比如“;”用来作为一句完整语句的结束。2022-2-22-9-北京邮电大学信息与通信工程学院2.1 2.1 词法记号和标识符词法记号和标识符空白 在C+语句中经常
5、出现空白(制表符、空格、空行)等,通常都忽略不计。2022-2-22-10-北京邮电大学信息与通信工程学院2.2.2 2 基本数据类型基本数据类型北京邮电大学信息与通信工程学院2022-2-22-11-2.2 2.2 基本数据类型基本数据类型什么是数据类型? 数据是程序处理的对象,数据根据其本身的特点进行分类,从而形成不同的数据类型。 例如:数学中有自然数、整数、实数 不同类型的数据有不同的表示和处理方法,具有不同运算规则2022-2-22-12-北京邮电大学信息与通信工程学院2.2 2.2 基本数据类型基本数据类型基本数据类型 整型:int 字符型:char 、wchar_t 实型:floa
6、t、double 逻辑型:bool2022-2-22-13-北京邮电大学信息与通信工程学院2.2 2.2 基本数据类型基本数据类型修饰符 在C+中描述为了更加准确的描述数据类型,提供了4个关键字用来修饰基本的数据类型: 1、长型 long 2、短型 short 3、有符号 signed 4、无符号 unsigned2022-2-22-14-北京邮电大学信息与通信工程学院1、short:仅用来修饰int,称为短整型,占2字节内存,也可直接简写为short;2、long: 仅修饰int和double,在不同的编译环境中使用long修饰的double类型数据所占内存不同。 3、unsigned: 用
7、来修饰char、short和int,表示该数据类型为无符号数。 4、signed: 用来修饰char、short和int,表示该数据类型为有符号数,为缺省设置。2022-2-22-15-北京邮电大学信息与通信工程学院2.2 2.2 基本数据类型基本数据类型数据类型与内存空间 不同的数据类型,加上不同的修饰符就具有了不同的特点,在内存中占用的空间也不同,因而其所能表示的数值范围也不尽相同。 内存单元的单位是字节,因此用来表示数据类型的长度的单位也是字节。 2022-2-22-16-北京邮电大学信息与通信工程学院2.2 2.2 基本数据类型基本数据类型数据类型与内存空间特定数据类型在内存中占用的内
8、存因机器的不同而不同 整型int的长度等于机器的字长: 16位机:int=2字节; 32位机:int=4字节。 2022-2-22-17-北京邮电大学信息与通信工程学院2.2 2.2 基本数据类型基本数据类型数据类型与内存空间如果需要编写可移植性好的程序,应将整型声明为short或long。因为short和long表示的数据长度是固定的,任何支持标准C+的编译器都是如此。-18-2022-2-22北京邮电大学信息与通信工程学院2.2 2.2 基本数据类型基本数据类型例2-1 打印各种数据类型的长度 编写一个程序,输出基本数据类型char, int, float, double,bool的长度。
9、提示: 使用sizeof(数据类型) 能够获取不同数据类型的长度。-19-2022-2-22北京邮电大学信息与通信工程学院/例例2-1 2-1 显示各种数据类型的长度显示各种数据类型的长度#include #include using namespace std;using namespace std;void main()void main() coutchar coutchar :sizeof(char)sizeof(char)字节字节n;n; coutint coutint :sizeof(int)sizeof(int)字节字节n;n; coutfloat coutfloat :size
10、of(float)sizeof(float)字节字节n;n; coutdouble coutdouble:sizeof(double)sizeof(double)字节字节n;n; coutbool coutbool :sizeof(bool)sizeof(bool)字节字节n;n; -20-在32位机上运行结果 char :1字节 int : 4字节 float : 4字节 double : 8字节 bool :1字节2022-2-22北京邮电大学信息与通信工程学院2.3 2.3 变量和常量变量和常量-21-北京邮电大学信息与通信工程学院2022-2-222.3 2.3 变量和常量变量和常量概
11、述 程序所处理的数据不仅分为不同的数据类型,而且每种类型的数据还分为变量和常量。程序在运行中就是通过这些变量和常量来操作数据的。 2022-2-22-22-北京邮电大学信息与通信工程学院2.3 2.3 变量变量什么是变量? 在C+中,变量是存储信息的地方。变量的实质是内存中的一个地址空间,在这个地址空间中可以进行数据的存储和读取。 2022-2-22-23-北京邮电大学信息与通信工程学院定义变量的格式数据类型 变量名1,变量名2,变量名n;例如:定义各种类型的变量 int num; float f; char ch; short s; double area, length;2022-2-22
12、-24-2.3 2.3 变量变量北京邮电大学信息与通信工程学院2.3 2.3 变量变量定义变量的实质例如:int num;系统根据所指定的数据类型int,从地址xxxxxxxH开始,为变量num分配4个字节单元。变量num的取值范围为2312311。2022-2-22-25-北京邮电大学信息与通信工程学院2.3 2.3 变量变量定义变量的实质例如:int num;编程时,可以直接使用变量名num对存储在该内存空间的数据,也就是变量值进行存取。变量名和地址xxxxxxxH之间的对应关系由系统来管理。2022-2-22-26-北京邮电大学信息与通信工程学院2.3 2.3 变量变量几点说明 在创建或
13、定义变量时,需要指明该变量的数据类型和名称。 数据类型:决定变量的存储方式和可以进行的操作; 变量名称:用来区分不同的变量。 2022-2-22-27-北京邮电大学信息与通信工程学院2.3 2.3 变量变量几点说明在C+程序中使用变量,必须“先定义或声明,后使用”,而且只能定义一次。 变量定义语句的位置,C+中没有要求,放在第一次使用该变量之前的任何位置均可以。2022-2-22-28-建议:把变量定义语句放在首次使用它的地方,这样可以提高程序的可读性。北京邮电大学信息与通信工程学院2.3 2.3 变量变量变量的命名遵循标识符定义的规则,常用的命名约定有三种: 1、Unix环境常用的命名法 m
14、y_age、num_of_student 2、驼峰式命名法 myAge、numOfStudent 3、匈牙利标记法 iMyCar、bIsRight2022-2-22-29-北京邮电大学信息与通信工程学院2.3 2.3 变量变量变量的赋值 使用赋值运算符“=”可以将一个值赋给变量。 例如: unsigned short age; age = 18; 也可以在定义变量的同时进行初始化: unsigned short age = 18; 或 unsigned short age (18);unsigned short age (18);2022-2-22-30-北京邮电大学信息与通信工程学院2.3
15、2.3 变量变量变量的赋值 我们可以一次定义多个相同数据类型的变量,也可以一次为多个变量初始化: char ch1=a, ch2=b ; int height=10, width=6, area ;2022-2-22-31-特性:变量可以被多次赋值,但每次赋值后,原值都会被新值覆盖。北京邮电大学信息与通信工程学院2.2.3 3 变量变量例2-2 赋值运算符的使用 #include using namespace std; void main() int myAge = 18; cout“myAge=” myAgeendl; myAge = 20; cout“myAge=” myAgeendl;
16、 -32-2022-2-22北京邮电大学信息与通信工程学院运行结果: myAge = 18 myAge = 202.3 2.3 变量变量typedef 为已有的数据类型定义一个同义词,或者叫做别名。 格式:typedef 原类型名 新类型名; 例如:typedef unsigned short int UINT16 UINT16 i;2022-2-22-33-注意:typedef语句并没有定义一个新的数据类型,只是声明了原有数据类型的一个别名。北京邮电大学信息与通信工程学院2.3 2.3 常量常量常量 常量代表一个固定的值。严格来说,常量又分成符号常量和常数。 符号常量:是用标识符表示的常量;
17、 常数:程序中使用的具体的数据。2022-2-22-34-北京邮电大学信息与通信工程学院2.3 2.3 常量常量符号常量 C+中提供了一个关键字const,用来区分常量和变量。由于常量在程序运行过程中不能够被改变,所以要求常量在定义的时候必须进行初始化。符号常量的定义格式: const 数据类型 常量名 = 常量值; 例如:const float PI = 3.14159; 2022-2-22-35-北京邮电大学信息与通信工程学院2.3 2.3 常量常量define关键字 在C语言中使用预编译指令#define也能够定义常量。 例如:#define PI 3.1415927 说明:该语句属于预
18、编译指令,不属于C+语句,因而行尾不需要使用分号。并且由于C+是向下兼容的,因而C语言的程序能够在C+的编译器下顺利运行。但是在C+编程中,建议使用const替代#define定义常量。2022-2-22-36-北京邮电大学信息与通信工程学院2.3 2.3 常量常量编程时使用符号常量可以增强程序的可读性可以增强程序的可维护性2022-2-22-37-北京邮电大学信息与通信工程学院2.3 2.3 常量常量整型常数 C+中的整型常数可以使用多种数制十进制数:100 8进制数: 0144 16进制数:0 x64整型常数默认是int类型用 U或u表示无符号整型,如65535U 。 用 L或l表示长整型
19、, 如123L。2022-2-22-38-北京邮电大学信息与通信工程学院2.3 2.3 常量常量实型常数1、小数形式 例如:0.123、23.12 2、指数形式表示形式: aEb代表数值:a 10b例如:123e5或123E5 =123105 2022-2-22-39- 注意: b必须是十进制整数,a可以是十进制整数或者小数形式的实数,并且数字a和b都不可以省略北京邮电大学信息与通信工程学院2.3 2.3 常量常量实型常数实型常数默认为double型可用后缀 F(f)表示实数常数为float型。可用后缀L(l)表示实数常数为long double型。2022-2-22-40-北京邮电大学信息与
20、通信工程学院2.3 2.3 常量常量字符常数 1、用单引号扩起来的一个字符, 例如:a、 ?。 2、转义字符 以开头的字符序列,代表特殊的意义。 例如:n、t、”2022-2-22-41-北京邮电大学信息与通信工程学院a0 x07bell(响铃)n0 x0A换行r0 x0D回车t0 x09制表符v0 x0B垂直跳格b0 x08Backspace0 x5C0 x22双引号0 x27单引号 ooo 1-3位8进数 xhh 1-2位16进数2022-2-22-42-北京邮电大学信息与通信工程学院例例2 2- -3 3:打印特殊字符#include using namespace std;void m
21、ain() cout“输出字母:” aaendl; cout“输出字母:” nn;运行结果: 输出字母:a (蜂鸣器响一声) 输出字母:n (换行)2022-2-22-43-北京邮电大学信息与通信工程学院2.3 2.3 常量常量字符常数反斜线还可以和13位八进制数或以x开始的12位十六进制数结合表示任何ASCII字符。例如:例2-3中的输出还可以写为cout“输出字母:” x61x07endl; cout“输出字母:” x6Ex0A; 2022-2-22-44-北京邮电大学信息与通信工程学院2.3 2.3 常量常量字符数据的存储在内存中,字符数据以ASCII码存储,可看成是单字节整数表示,所以
22、,C+中字符数据和整数可以相互赋值。例2-4 字符数据和整型数据的转换2022-2-22-45-北京邮电大学信息与通信工程学院/例例2-42-4:同样数据的不同输出:同样数据的不同输出#include using namespace std;void main() int n=a; char ch = 97; cout”按整数输出内容:”nendl; cout”按字符输出内容:”chendl;运行结果: 按整数输出内容:97 按字符输出内容:a注意:变量在输出时,根据其本身的数据类型进行输出。2022-2-22-46-北京邮电大学信息与通信工程学院2.3 2.3 常量常量字符串常量由一对双引号
23、括起来的字符序列。 例如:“how do you do?” “hello world!”2022-2-22-47-北京邮电大学信息与通信工程学院2.3 2.3 常量常量字符串常量在内存中的存储字符串常量在内存中除了存储所包含字符外,还需要存储一个结束符0。一个字符数据在内存中占用1字节的空间。2022-2-22-48-注意:字符串“A”与字符A的不同北京邮电大学信息与通信工程学院2.3 2.3 常量常量思考:字符串 “x07Operatingtsystem” 有几个字符?显示结果如何? 2022-2-22-49-北京邮电大学信息与通信工程学院2.3 2.3 常量常量逻辑常数 逻辑型常数只有两个
24、:false(假)和true(真)。在显示器上显示为0和1。2022-2-22-50-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式2.4 2.4 运算符和表达式运算符和表达式1、表达式2、语句和块3、运算符 赋值运算符、算术运算符、关系运算符、逻辑运算符、位运算符、条件运算符、逗号运算符2022-2-22-52-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式表达式 变量、常量是存放数据的地方,那么在C+语言中这些数据是如何处理和计算的呢? 在C+语言中将变量、常量和运算符有机结合在一起组成的就是表达式,利用表达式C+可以进行复杂的运算和
25、处理。 2022-2-22-53-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式表达式 表达式是操作符、操作数和分隔符号组成的序列。 操作符:+ - * / 等 操作数:变量、常量、数组等 表达式总能返回一个值作为表达式的结果。2022-2-22-54-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式表达式例如:3.2 /简单表达式,值为3.2 2+3 /常量表达式,值为5 a /简单表达式,值为变量a的值x=(a+b)* c /较为复杂的表达式 y=x=a+b /表达式是可以嵌套的2022-2-22-55-北京邮电大学信息与通信工程学院2
26、.4 2.4 运算符和表达式运算符和表达式语句和块 由表达式和结尾的“;”组成一个C+语句。 多条C+语句通过大括号括起来,组成一个块语句。一般来说属于同一个逻辑关系的多条语句组成块语句。2022-2-22-56-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式语句和块例如:实现将变量x和y交换的语句块 int temp = x; x = y; y = temp;2022-2-22-57-注意:结束语句块的大括号外不用分号。北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式运算符 运算符具有优先级和结合性。 优先级: 级别高的先运算,级别低的后
27、运算。例如: * / 高于 + - 结合性: 自左向右结合还是自右向左结合。例如:1+2+3,+自左向右结合。 2022-2-22-58-北京邮电大学信息与通信工程学院2022-2-22-59-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式运算符根据运算符对操作数的要求不同,分成: 一元运算符: 仅需要一个操作数的运算符,例如+等 二元运算符: 需要两个操作数的运算符,例如:+、-、*、/等,三元运算符: 需要三个操作数的运算符,只有条件运算符“?:”。2022-2-22-60-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式赋值运算符赋值
28、运算符就是:“=” 例如:float f=3.15 左值:可以合法的放在“=”左边的操作数。 右值:可以合法的放在“=”右边的操作数。 2022-2-22-61-注意:并不是所有的操作数都可以作为左值。符号常量就不能作左值;带运算符的表达式一般也不能作为左值。北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式赋值运算符例如:float x, y;float x, y;const float PI=3.14;const float PI=3.14; x = 3.5;x = 3.5;/正确正确 3.5 = x; 3.5 = x; /有语法错误有语法错误 y = x; y =
29、 x; /正确正确 y+2 = x-10; y+2 = x-10; /语法错误语法错误PI=x;PI=x;/语法错误语法错误2022-2-22-62-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式算术运算符 C+提供的算术运算符包括“+,-,*,/,%,+,-” 二元运算符: +(加),-(减),*,/,% 一元运算符: +(正号),-(负号),+,-2022-2-22-63-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式算术运算符 几点说明:“/” 根据操作数不同,运算规律也不同: 整型数为整除运算:例如5/2=2; 浮点数为通常意义的
30、除法:即5.0/2.0=2.5。“%”取余数运算符,只能对整型数进行操作,余数的正负由被除数决定,不允许对浮点数进行操作。例例2-5 2-5 “/ /”和和“% %”运算符的使用运算符的使用2022-2-22-64-北京邮电大学信息与通信工程学院/例例2-5 2-5 “/ /”和和“% %”运算符的使用。运算符的使用。#include #include using namespace std;using namespace std;void main()void main() int a=-4, b=3; int a=-4, b=3; couta=a b=bendl; couta=a b=be
31、ndl; couta/b= a/bendl; couta/b= a/bendl; cout(float)a/b=(float)a/bendl; cout(float)a/b=(float)a/bendl; couta%b= a%bendl; couta%b= a%bendl; coutb%a= b%aendl; coutb%a= b%aendl; 运行结果: a=-4 b=3a=-4 b=3 a/b=-1 a/b=-1 (float)a/b=-1.33333 (float)a/b=-1.33333 a%b=-1 a%b=-1 b%a=3 b%a=32022-2-22-65-北京邮电大学信息与通
32、信工程学院2.4 2.4 运算符和表达式运算符和表达式算术运算符 C+中提供了两个特殊的运算符:+(自增),表示将操作数加1;-(自减)表示将操作数减1前置(+i): 先自身加1,然后再将加1的值作为(+i)表达式的值; 后置(i+): 将i作为(i+)表达式的值,然后自身再加1。 例2-6自增运算符的使用2022-2-22-66-北京邮电大学信息与通信工程学院/例2-6 自增运算符的使用#include using namespace std;void main()int i =1; cout”i=”iendl; c o u t ” i + + : ” i + + e n d l ; cou
33、t”i=”iendl; cout” +i:”+iendl; cout”i=”iendl; 11233北京邮电大学信息与通信工程学院运行结果: i=1 i+: 1 i=2; +i: 3 i=32022-2-22-67-2.4 2.4 运算符和表达式运算符和表达式算术运算符 在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%y2022-2-22-68-北京邮电
34、大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式算术运算符例如:#include using namespace stdvoid main()int x=2,y=3; x*=y+8; coutxendl;原因:x*=y+8 等价于 x=x*(y+8)/显示222022-2-22-69-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式2022-2-22-70-算术运算符 算术运算符的优先级: 1、+(正号),-(负号),+,- 2、*,/,% 3、+、- 4、=、+=、-=、*=、/=、%=由高到低北京邮电大学信息与通信工程学院2.4 2.4 运算符和
35、表达式运算符和表达式算术运算符溢出是指运算结果超出了表达式的数据类型能够表示的范围。 在进行算术运算时,很可能出现溢出。溢出不会引起编译错误的,但运行结果会出现偏差。 例如:short int i=20000, j=30000,k;short int i=20000, j=30000,k; cout(k=i+j)endl;cout(k=i+j)=、=、=、=、 2、=、!= 2022-2-22-73- 高低北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式关系运算符 例如: int a=1, b=2, c=3; int a=1, b=2, c=3; cout(a=b)e
36、ndl; cout(a=b)endl;/结果为结果为falsefalse,输出为,输出为0 0 cout(a!=b)endl; cout(a!=b)endl;/结果为结果为truetrue,输出为,输出为1 1 cout=b)endl; cout=b)endl;/结果为结果为falsefalse,输出为,输出为0 0 cout(ab)endl; / cout(ab)b=ca+5; bool d=ab=ca+5; coutdendl; / coutdb & b+)if (ab & b+) coutbcoutb的值将等于的值将等于endl;endl; coutbendl;coutb
37、endl;2022-2-22-77-运行结果:2北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式位运算符 一般高级语言:byte C/C+语言: bit C+语言中提供了六个位运算符,可以对整数进行位操作,分别是&(按位与),|(按位或),(按位异或),(按位取反),(右移位)。2022-2-22-78-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式按位与(&) 按位与操作的作用是将两个操作数对应的每一位分别进行逻辑与操作。 例如:计算3 & 5 3:0 0 0 0 0 0 1 1 5:0 0 0 0 0 1 0 1
38、 3 &5:0 0 0 0 0 0 0 1 2022-2-22-79-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式按位与(&) 使用按位与(&)操作可以将操作数中的若干位置0(其他位不变),或者取操作数中的若干指定位。例如:将字符变量a(char)的最低位置0:a=a & 0376; 取整型变量a(int)的低字节:char c= a & 0377;2022-2-22-80-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式按位或(|) 按位与操作的作用是将两个操作数对应的每一位分别进行逻辑或操作。
39、例如:计算3 | 5 3:0 0 0 0 0 0 1 1 5:0 0 0 0 0 1 0 1 3 |5:0 0 0 0 0 1 1 1 2022-2-22-81-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式按位或(|) 使用按位或(|)操作可以将操作数中的若干位置1(其他位不变)。例如:将整型变量的a(int)的低字节置1:a = a | 0 xff; 2022-2-22-82-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式按位异或() 按位异或操作的作用是将两个操作数对应的每一位分别进行异或操作。 具体运算规则:11=0,00=0,1
40、0=01=1 例如:计算35 3:0 0 0 0 0 0 1 1 5:0 0 0 0 0 1 0 1 3 5:0 0 0 0 0 1 1 02022-2-22-83-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式按位异或() 使用按位异或()操作可以将操作数中的若干位反转。如果某位和0异或,结果是该位的原值;如果某位和1异或,则结果与该位原来的值相反。 2022-2-22-84-思考:如果使8位二进制数01111010的后四位翻转?北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式按位取反() 按位取反是一个一元运算符,它的作用是将操作数对应
41、的每一位分别进行取反操作。 具体运算规则:1=0,0=1。 例如:计算5 5:0 0 0 0 0 1 0 1 5:1 1 1 1 1 0 1 02022-2-22-85-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式使用位运算实现掩码运算 掩码:其实就是一个位模式。表示从一个字中选出一组位。 例如:掩码0 xFF表示一个字的低位字节。 掩码0 xFFFFFF00,它表示一个字(32位)除了最低字节外的其他高位字节。 掩码0 xFF也可表示一个字除了最低字节外的其他高位字节。2022-2-22-86-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和
42、表达式位运算应用举例例2-7 设主机A的IP地址为IPa,子网掩码设置为MASKa,主机B的IP地址为IPb,子网掩码设置为MASKb。(1)当主机A向主机B发送IP包时,如何判断主机B是否与自己在同一子网中?(2)当主机A和主机B通信时,两主机又如何确认对方和自己在同一子网中?2022-2-22-87-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式位运算应用举例例2-7 解:(1)(IPaIPb)&MASKa=0 或(IPa&MASKa)=(IPb&MASKa)(2)(IPa&MASKa)=(IPb&MASKb) 或(IPa
43、&MASKa)(IPb&MASKb)= =02022-2-22-88-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式左移: 按照指定的位数将一个二进制数值向右移动,右移后,移出的低位舍弃。 如果是无符号数则高位补0,如果是有符号数则高位补符号位或0,在VC2005环境下高位补符号位。2022-2-22-89-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式移位运算举例char a= -8; a =a2;cout”a=”(int)aendl;2022-2-22-90-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式
44、运算符和表达式移位运算举例char a=2; a =a1;cout”a=”(int)aendl;2022-2-22-91-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式位运算符 在C+中可以将位运算符和赋值运算符结合在一起进行运算,因此C+还提供另外5种复合赋值运算符&=,|=,=,=。 例如: x&=y 相当于 x = x&y x|=y 相当于x = x|y x=y 相当于x = xy x=y 相当于 x = x=y 相当于 x = xy 2022-2-22-92-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式位
45、运算符优先级位运算符的优先级由高到低依次为:1、2、3、&4、5、|6、&=,|=,=,=2022-2-22-93-由高到低北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式条件运算符 条件运算符语法格式为: 表达式1?(表达式2):(表达式3); 运算的结果是:如果表达式1的值为真,则返回表达式2的值,否则返回表达式3的值。 例如:int x=0, y=1; couty?x:y)endl;2022-2-22-94-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式逗号运算符 逗号表达式的语法格式为: 表达式1,表达式2,表达式n
46、; C+顺序计算表达式1,表达式2,表达式n的值,并将最后一次计算的结果作为逗号表达式的结果。 例如:int a,b,c,d; d=(a=1,b=2,c=a+b,a+b+c); coutdendl;2022-2-22-95-北京邮电大学信息与通信工程学院运行结果:62.4 2.4 运算符和表达式运算符和表达式数据类型转换 当表达式中出现多种数据类型的混合运算时,往往需要进行类型转换。表达式中的类型转换分成两种: 1、隐式类型转换 2、强制类型转换。2022-2-22-96-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式隐式类型转换 各种二元运算符在进行运算时都要求两
47、个操作数的数据类型一致。如果类型不一致,则系统自动对数据进行转换(隐式类型转换)。 转换的基本原则: 将精度较低、范围较小的类型转换成精度较高、范围较大的类型。 char short int long float double2022-2-22-97-北京邮电大学信息与通信工程学院隐式类型转换例2-8 数据类型的自动转换。#include #include using namespace std;using namespace std;void main()void main() char ch=a; char ch=a; int i=100; int i=100; double d=123.
48、09; double d=123.09; coutch+iendl; coutch+iendl; / /自动转换为自动转换为intint型型 coutch+i+dendl; / coutch+i+dendl; /自动转换为自动转换为doubledouble型型 运行结果: 197197 320.09 320.092.4 2.4 运算符和表达式运算符和表达式提示:在转换过程中不会造成数据精度的丢失。2022-2-22-98-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式隐式类型转换 对于同一种精度的无符号数和有符号数,在进行算术运算中,有符号数向着无符号数方向进行隐式
49、类型转换: signed unsigned。 例如: int a=100; unsigned int i=99; couti - aendl;2022-2-22-99-思考:如果将unsigned int i=99;改为unsigned short i=99;结果如何?北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式隐式类型转换 逻辑运算符要求参与运算的操作数为bool类型,如果是其他类型,则系统自动将其转换成bool类型。转换规则:0为false,非0为true。 赋值运算符要求“=”左右两边的操作数数据类型相同,如果类型不一致,则自动将右边的操作数类型向着左边的操
50、作数类型转换。 例如:int i=3.15; coutiendl;2022-2-22-100-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式C风格的强制类型转换 语法格式为: (数据类型名)表达式 或: 数据类型名(表达式) 例如:int i=97; cout(char)iendl; float f=3.75; cout(int)fendl;2022-2-22-101-北京邮电大学信息与通信工程学院2.4 2.4 运算符和表达式运算符和表达式C+的强制类型转换符 语法格式为:static_cast(表达式)例如: int i=97; coutstatic_cast(
51、i)endl; float f=3.15; coutstatic_cast(f)”就可以将键盘键入的数据读入到变量中。语法格式为: cin变量1变量2变量n; 例如:int a,b; char ch; cinabch;2022-2-22-106-北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出例2-9:计算从键盘输入的若干个整数的和。#include#includeusing namespace std;using namespace std;void main(void main( ) ) int sum=0,value; int sum=0,value; while(
52、cinvalue) while(cinvalue) /如果能从如果能从cincin提取数值,提取数值, sum+=value; / sum+=value; /则则cincin的值为真,执行循环的值为真,执行循环 coutsum is: sumendl; coutsum is: sumendl; 运行结果: 1 2 3 4 5 z /键盘输入 sumis:152022-2-22-107-北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出标准输出流cout cout负责将变量或常量中的数据输出到屏幕,使用插入操作符“”就可以将变量或常量的数据显示在屏幕上。 cout能够自动识别
53、“”后面的数据类型并进行显示,并且可以从左到右一次显示多个变量。例如:cout”Hello world!n”;2022-2-22-108-北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出例2-10:cout的使用#include using namespace std;void main()int a,b;char ch;coutabch; cout”a=”a” b=”b” ch=”chendl;运行结果:请按顺序输入两个整数和一个字符: 1 2 a /键盘输入 a=1 b=2 ch=a /屏幕输出2022-2-22-109-北京邮电大学信息与通信工程学院2.5 2.5
54、基本输入输出基本输入输出IO流的格式控制 库文件:iomanip 常用操纵符: setfill(c) 设置填充字符 setw(n) 设置域宽为n setiosflags (ios:left) 设置数据输出左对齐 setiosflags (ios:right) 设置数据输出右对齐 2022-2-22-110-注意:用cout输出数据默认的对齐方式是右对齐。北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出IO流的格式控制 setw(n) 设置域宽,即设置“”符号后面的数据占用的屏幕宽度。 例如: coutsetw(8)asetw(8)bendl;2022-2-22-111-北
55、京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出IO流的格式控制setfill(c) 设置填充字符,即“”符号后面的数据长度小于域宽时,使用什么字符进行填充。例如: coutsetfill(*)setw(5)aendl; 2022-2-22-112-北京邮电大学信息与通信工程学院例2-11 setw()和setfill()的综合使用。#include #include using namespace std;void main() coutsetfill(*) setw(2)n setw(3)n setw(4)n setw(5)n setw(6)n setw(7)n set
56、w(8)n; * * * * * * *2.5 2.5 基本输入输出基本输入输出2022-2-22-113-北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出IO流的格式控制关于setw( )几点说明:除了setw()控制符外,其他控制符一旦设置,则对其后的所有输入输出产生影响。而setw()控制符只对其后输出的第一个数据有效,对其他数据没有影响。 例如:coutsetw(8) a bendl; 2022-2-22-114- 输出结果:_ _ _ _ _ _ _ab北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出IO流的格式控制关于setw( )几点说
57、明:setw()的默认为setw(0),意思是按实际输出。如果输出的数值占用的宽度超过setw(int n)设置的宽度,则按实际宽度输出。 例如:float f=0.12345; coutsetw(3)fendl; 2022-2-22-115- 输出结果: 0.12345北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出I/O流的格式控制 C+默认输出浮点数的有效位为6位,那么要想控制输出的数据的长度,该如何呢? 例如:float f=3.1234567;如何让显示结果为3.12?C+提供了setprecision(int n)可以控制显示浮点数的有效位。例2-12 控制浮
58、点数的数字个数。2022-2-22-116-北京邮电大学信息与通信工程学院/例例2-12 2-12 控制浮点数的数字个数。控制浮点数的数字个数。#include #include using namespace std;void main() float f=17/7.0;coutfendl;coutsetprecision(0)fendl;coutsetprecision(1)fendl;coutsetprecision(2)fendl;coutsetprecision(3)fendl;coutsetprecision(6)fendl;coutsetprecision(8)fendl;运行结
59、果:2.428572.4284722.42.432.428572.42857152022-2-22-117-北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出I/O流的格式控制 如何控制小数的位数? setiosflags(ios:fixed)控制符是用定点方式表示浮点数,将setprecision(int n)和setiosflags(ios:fixed)结合,可以使用setprecision(int n)控制小数点右边小数的个数。当设置为定点格式时,若不设置精度则显示6位有效小数。例2-13 定点小数的输出。2022-2-22-118-北京邮电大学信息与通信工程学院/例
60、例2-12 定点小数的输出。定点小数的输出。#include #include using namespace std;void main() float f=17/7.0; coutsetiosflags(ios:fixed); coutfendl; coutsetprecision(0)fendl; coutsetprecision(2)fendl; coutsetprecision(3)fendl; coutsetprecision(4)fendl;运行结果:2.42587122.432.4292.42862022-2-22-119-北京邮电大学信息与通信工程学院2.5 2.5 基本输入输出基本输入输出I/O流的格式控制 如何控制指数表示法的小数个数? setiosflags(ios:scientific)控制符使用指数方式显示浮点数,将setpre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 彩钢瓦顶棚施工方案(3篇)
- 田径馆管理制度范文(3篇)
- 移动生物安全室管理制度(3篇)
- 纺织助剂样品闭环管理制度(3篇)
- 蔬菜制品分装管理制度(3篇)
- 退役军人之家管理制度(3篇)
- 钻井队考勤管理制度(3篇)
- 纳米技术与微机械
- 《GAT 2000.44-2015公安信息代码 第44部分:案事件移送单位类型代码》专题研究报告
- 养老院入住老人生活照料培训制度
- 钳工个人实习总结
- 大健康养肝护肝针专题课件
- 物流公司托板管理制度
- 道路高程测量成果记录表-自动计算
- 关于医院“十五五”发展规划(2026-2030)
- DB31-T 1587-2025 城市轨道交通智能化运营技术规范
- 医疗护理操作评分细则
- 自考-经济思想史知识点大全
- 冬季驾驶车辆安全培训
- 医学师承出师考核申请表
- 晚期癌症疼痛控制课件
评论
0/150
提交评论