《基本数据类型运算符和表达式.PPT》由会员分享,可在线阅读,更多相关《基本数据类型运算符和表达式.PPT(63页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、Chapter 2 第二章基本数据类型、运算符和表达式2.1 数据类型2.2 变量和常量 2.3 运算符和表达式2.4 指针2.5 typedef语句2.6 应用举例4/22/20231 1安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 程程序序中中要要对对各各种种各各样样的的数数据据进进行行描描述述和和操操作作,用用到到的的数数据据都都必必须须指明其类型。数据类型的作用:指明其类型。数据类型的作用:指出了应为数据分配的存储空间的大小指出了应为数据分配的存储空间的大小规定了数据所能进行的操作规定了数据所能进行的操作2.1 2.1 数据类型数据类型数据类型数据类型基本
2、类型基本类型 构造类型构造类型 整型整型(int)(int)实型实型 字符型字符型(char)(char)布尔型布尔型(bool)(bool)空类型空类型(void)(void)单精度型单精度型(float)(float)双精度型双精度型(double)(double)数组数组指针指针结构型结构型(struct)(struct)共用体共用体(union)(union)枚举枚举(enum)(enum)类类(class)(class)4/22/20232 2安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 4/22/20233 3安徽理工大学计算机软件教研室安徽理工大学计
3、算机软件教研室Chapter 2 基本数据基本数据类型型C+语言的基本数据类型:语言的基本数据类型:数据类型数据类型 类型说明浮类型说明浮 占用字节占用字节字符型字符型 char 1个个短整数短整数 short 2个个整型整型 int 4个个浮点型浮点型 float 4个个双精度型双精度型 double 8个个4/22/20234 4安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 数据在数据在计算机中的存放算机中的存放数据在计算机中采用二进制存放;一个字节数据在计算机中采用二进制存放;一个字节8个二进制位,个二进制位,示意图如下:示意图如下:数的表示范围:数的表示范
4、围:-2727-1(-128127)显然,一个字节表示数的范围是有限的。要表示显然,一个字节表示数的范围是有限的。要表示更大范围内的数,就要使用多个字节。更大范围内的数,就要使用多个字节。704/22/20235 5安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 整数的存整数的存储格式格式字符型字符型短整型短整型短整数表示范围为:短整数表示范围为:-215215-1(-3276832767)长整型长整型 长整数表示范围为:长整数表示范围为:-231231-1701587031242316158704/22/20236 6安徽理工大学计算机软件教研室安徽理工大学计算机
5、软件教研室Chapter 2 实数的表示数的表示实数也称为浮点数,用于表示小数;有两种表示形式:实数也称为浮点数,用于表示小数;有两种表示形式:十进制形式:十进制形式:.指数形式:指数形式:.一般浮点数的可以达到一般浮点数的可以达到7位有效数字。例如位有效数字。例如1234.567。双精度浮点数的有效位数可以达到双精度浮点数的有效位数可以达到1516位。位。尾数部分尾数部分指数部分指数部分31242316158704/22/20237 7安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 程序运行过程中其值可变的量程序运行过程中其值可变的量,定义方式如下:定义方式如下:
6、数据类型数据类型 变量名表变量名表;C/C+C/C+规定:规定:程序中所有变量必须程序中所有变量必须先定义后使用先定义后使用,可及时发现,可及时发现录入错误录入错误(如,定(如,定义的变量为义的变量为datadata,而程序体中使用变量为,而程序体中使用变量为datedate),同时还可限制非法运算),同时还可限制非法运算(如:(如:a%b,a%b,若若a,ba,b为为floatfloat类型则出错)。类型则出错)。C+C+中变量可随时使用,随时定义。中变量可随时使用,随时定义。例如:例如:int a,b;(int a,b;(定义变量定义变量a a和和b b为整型为整型)float x,y;(
7、float x,y;(定义变量定义变量x x和和y y为单精度实型为单精度实型)2.2.1 2.2.1 变量变量2.2 2.2 变量和常量变量和常量1.变量的定义4/22/20238 8安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 变量必须先有确定的值后才能参与各种相应的操作,变量获取值变量必须先有确定的值后才能参与各种相应的操作,变量获取值的途径有三:的途径有三:通过输入语句输入通过输入语句输入 (如:如:cincina;)a;)通过赋值语句赋值通过赋值语句赋值 (如:如:a=3;a=3;)通过初始化方式赋初值通过初始化方式赋初值 (如:如:intint k=3
8、;)k=3;)所谓初始化是指在定义变量的同时指定变量的初值,形式有二:所谓初始化是指在定义变量的同时指定变量的初值,形式有二:例如:例如:intint k=3,m=3,n(3);k=3,m=3,n(3);()intint k=m=n=3;k=m=n=3;/不允许为多个变量同时初始化不允许为多个变量同时初始化数据类型数据类型 变量名变量名=表达式;表达式;数据类型数据类型 变量名(表达式);变量名(表达式);2.变量的初始化4/22/20239 9安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 C+C+中增加了中增加了“引用引用”这一概念,许多地方可以代替指针实现相这
9、一概念,许多地方可以代替指针实现相应的功能,比指针更安全。应的功能,比指针更安全。所谓引用即给一个已知变量起个所谓引用即给一个已知变量起个别名别名,系统不为引用另外开辟系统不为引用另外开辟内存,而是与原变量共享同一段内存内存,而是与原变量共享同一段内存,引用好比是一个虚拟的变量,引用好比是一个虚拟的变量,声明形式为:声明形式为:数据类型数据类型&引用名引用名=已定义的变量已定义的变量如:如:int a=3,&b=a;/int a=3,&b=a;/定义定义b b为为a a的引用的引用b=5;b=5;/你知道此时你知道此时a a的值为多少吗?的值为多少吗?3.变量引用4/22/20231010安徽
10、理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 通过引用名与通过被引用的变量名访问变量的效果是通过引用名与通过被引用的变量名访问变量的效果是一样的。使用引用是必须注意下列问题:一样的。使用引用是必须注意下列问题:声明一个引用时,必须同时对它进行初始化,使它指声明一个引用时,必须同时对它进行初始化,使它指向一个已存在的对象。向一个已存在的对象。一旦一个引用被初始化,就不能改为指向其他对象。一旦一个引用被初始化,就不能改为指向其他对象。即一个引用从它诞生之时起,就必须确定是哪个变量即一个引用从它诞生之时起,就必须确定是哪个变量的别名,而且始终只能作为这个变量的别名,不能另作
11、的别名,而且始终只能作为这个变量的别名,不能另作他用。他用。引用可以作为形参,称为引用调用。引用可以作为形参,称为引用调用。4/22/20231111安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 2.2.2 2.2.2 常量常量进制进制形式形式实例实例错例错例十进制十进制以数字以数字19开始开始-3,+5,12045八进制八进制以数字以数字0开始开始(由由07之间数字组成)之间数字组成)023,-010078十六进制十六进制以以0 x或或0X开始开始(由由09及及AF组成)组成)0XAF,-0X510XFG在程序运行过程中其值不能改变的量,有在程序运行过程中其值不
12、能改变的量,有值常量和符号常量值常量和符号常量两种。两种。1.整型常量4/22/20231212安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 十进制小数形式十进制小数形式:由正负号、数字和小数点组成,:由正负号、数字和小数点组成,如如1.251.25、-1.25-1.25、17.17.和和.1 .1 指数形式指数形式:由尾数、指数符号:由尾数、指数符号e(e(或或E)E)及指数构成,其中及指数构成,其中指数指数必必须是十进制整数。如须是十进制整数。如1.25e-51.25e-5、+1e10+1e10、-1.25e5-1.25e5。注意注意:e e前面不能没有数字,
13、前面不能没有数字,e e后面的数字必须为整数,也不能加园后面的数字必须为整数,也不能加园括号。如括号。如1E(-3)1E(-3)、E-5E-5、1e2.11e2.1都是错误的。都是错误的。2.实型常量4/22/20231313安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 C/C+C/C+提供了两类字符型常量:提供了两类字符型常量:普通字符常量普通字符常量:用单引号括起来的一个字符。如:用单引号括起来的一个字符。如:AA、00、?。转义字符常量转义字符常量:以:以“”“”(反斜杠)开头的用单引号括起(反斜杠)开头的用单引号括起来的字符序列。如:来的字符序列。如:n
14、n 、t t 、x61 x61等。等。常用的转义常用的转义字符见字符见p26p26。注意注意:0 0表示表示ASCIIASCII码为码为0 0的字符的字符,它是一个空字符,注意其与它是一个空字符,注意其与00的区别,后者表示的是的区别,后者表示的是ASCIIASCII码为码为4848的数字字符。的数字字符。字符型数据在内存中以字符型数据在内存中以ASCIIASCII码存储,故整型数据和字符型数码存储,故整型数据和字符型数据在一定范围内可以通用。如:据在一定范围内可以通用。如:2.字符常量x=a+2;x=a+2;4/22/20231414安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室C
15、hapter 2 是以标识符形式出现的常量,作用是便于程序阅读和修改。是以标识符形式出现的常量,作用是便于程序阅读和修改。C+C+中用中用definedefine命令或关键字命令或关键字constconst定义符号常量定义符号常量,形式如下:形式如下:字符串常量是用双引号括起来的字符序列字符串常量是用双引号括起来的字符序列,系统在字符串常量系统在字符串常量最后自动加字符串结束符号最后自动加字符串结束符号 0 0 。例如:例如:字符串字符串“A”“A”的存储形式:的存储形式:字符字符AA的存储形式:的存储形式:A 0 A内存中实际存放的是内存中实际存放的是这些字符的这些字符的ASCII码码#de
16、fine#define#define#define 标识符标识符标识符标识符 常量值常量值常量值常量值或:或:或:或:const const const const 数据类型数据类型数据类型数据类型 标识符标识符标识符标识符=常量值常量值常量值常量值4.字符串常量5.符号常量4/22/20231515安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 注意:注意:习惯上符号常量名大写,而变量名小写,以示区分。习惯上符号常量名大写,而变量名小写,以示区分。符号常量虽然用标识符来标识,但本质上是常量,具有常符号常量虽然用标识符来标识,但本质上是常量,具有常量值不能改变的性质
17、。量值不能改变的性质。#define PI 3.14#include iostream.hvoid main()float r=3.0,s,l;l=2*PI*r;s=PI*r*r;coutl=l,s=s .2左结合左结合2!+-+(类型类型)*&sizeof new delete1右结合右结合3*/%2左结合左结合4+-2左结合左结合52左结合左结合6 =2左结合左结合7=!=2左结合左结合8&2左结合左结合92左结合左结合10|2左结合左结合11&2左结合左结合12|2左结合左结合13?:3右结合右结合14=+=-=*=/=%=|=2右结合右结合15,2左结合左结合4/22/20232222
18、安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 种类:种类:+(加法或取正)(加法或取正)-(减法或取负)(减法或取负)*(乘法)(乘法)/(除法)(除法)%(求余数)(求余数)+(自增)(自增)-(自减)(自减)正、负正、负加、减加、减2.3.2 2.3.2 运算符运算符1.算术运算其中:其中:+和和-的结合性则是自右向左的结合性则是自右向左 优先级:优先级:(从高到低从高到低)(+(+、-、+、-)-)(*(*、/、%)%)(+(+、-)-)4/22/20232323安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 说明:说明:在除法运
19、算中,当两个操作数都是整数时,商也为在除法运算中,当两个操作数都是整数时,商也为整数整数,小数部,小数部分一律舍去。如:分一律舍去。如:1/2 0 1.0/2 0.5%(求余运算)要求两个操作数都是(求余运算)要求两个操作数都是整型整型,结果为整除后余下的,结果为整除后余下的整余数。整余数。自增、自减运算符自增、自减运算符(+、-)+i ,-i (在使用在使用 i之前之前,先使先使i的值加减的值加减1)i+,i-(在使用在使用 i之后之后,使使i的值加减的值加减1)若若 i i 的值为的值为3 3,则:,则:j=+i;j j=+i;j的值为的值为4,i4,i的值为的值为4 4 j=i+;j j
20、=i+;j的值为的值为3,i3,i的值为的值为4 4注意注意:自增、自减运算符只能用于变量,而不能用于常量自增、自减运算符只能用于变量,而不能用于常量和表达式。和表达式。()5+、(a+b)+4/22/20232424安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 有关表达式使用中的问题说明:1.在表达式中包含自加(减)运算时,很容易出错。如:(i+)+(i+)+(i+)表达式值为9,然后i值为6;(i原为3)k=(+i)+(+i)+(+i)先对i自加三次1,i得6,然后k=6+6+62.C语言中有的运算符为一个字符,有的为两个字符,如:i+j,是理解成(i+)+j
21、,还是i+(+j)呢?C编译时尽可能多地自左而右将若干字符组成一个运算符,故解释为(i+)+j。4/22/20232525安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 种类种类:(小于)、(小于)、=(大于)(大于)=(等于)、(等于)、=(大于等于)、(大于等于)、!=!=(不等于)(不等于)优先级优先级:(从高到低)(从高到低)(、=、=)=)(=(=、!=)!=)关关系系运运算算描描述述的的是是一一种种“判判断断关关系系”,其其结结果果有有“真真(true)”(true)”和和“假假(false)”(false)”两种。用两种。用“1”“1”代表代表“真真”
22、,用,用“0”“0”代表代表“假假”例如:例如:5353的结果为的结果为1 1,a a B B 的结果为的结果为0 0思考:思考:x x为为0 0到到100100之间的数能否表示为之间的数能否表示为 0=x=100?0=xb)&(n=cd)当a=1,b=2,c=3,d=4,m和n原值为1;由于ab的值为0,所以m=0,而n=cd不被执行,因此n的值仍保持原值1。4/22/20232828安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2#include iostream.hvoid main()int m,n=10;m=2&n+;coutm=m,n=y?x:y)(xy?
23、x:y);/将和中较大的一个数赋值给变量将和中较大的一个数赋值给变量maxmax条件运算符的结合性是由右向左条件运算符的结合性是由右向左思考题:思考题:对对n(0)n(0)个个人人进进行行分分班班,每每班班k(0)k(0)个个人人,最最后后不不足足k k人人也也编编一一班班,问要编几个班?(试用条件运算符表达)问要编几个班?(试用条件运算符表达)n%k0?n/k+1:n/k格式:格式:作用:作用:将一个数据赋给一个变量,并以变量的值作为整个式子的值。将一个数据赋给一个变量,并以变量的值作为整个式子的值。变量变量变量变量 赋值运算符赋值运算符赋值运算符赋值运算符 表达式表达式表达式表达式5.赋值
24、运算4/22/20233030安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 其中赋值运算符可以是其中赋值运算符可以是“=”,“=”,也可以是复合赋值运算符也可以是复合赋值运算符,如如“+=”“+=”、“-=”“-=”、“*=”“*=”、“/=”“/=”和和“%=”“%=”等等。等等。复合赋值运算符的等价形式:复合赋值运算符的等价形式:(以(以“+=”“+=”为例)为例)例如:例如:b/=a+2 b/=a+2 等价于:等价于:b=b/(a+2)b=b/(a+2)结合性自右向左结合性自右向左若两端类型不同,则系统自动将右端类型转换为左端类型。若两端类型不同,则系统自动
25、将右端类型转换为左端类型。例如:有定义例如:有定义 intint a=3.78;a=3.78;则则a a中存放的值为中存放的值为3 3左端只能是变量左端只能是变量(或数组元素或数组元素),不能为表达式或常量,如:,不能为表达式或常量,如:a+2*=b (a+2*=b ()a=b+2=c+5 (a=b+2=c+5 ()变量变量+=+=表达式表达式变量变量=变量表达式变量表达式4/22/20233131安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 赋值表达式也可包含复合的赋值运算符,如:a+=a-=a*a,如a=12,先进行a=a-a*a运算,结果为-132;然后进行
26、a+=-132运算,结果为-264。赋值表达式不仅可出现在赋值语句中,还可以表达式形式出现在其它语句中(如循环语句)。4/22/20233232安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 形式:形式:e1,e2,e3,e1,e2,e3,其中其中e1e1、e2e2、e3e3均为表达式,从左向右依次计算各个表达式的均为表达式,从左向右依次计算各个表达式的值,而将最后一个表达式的值作为整个表达式的值,逗号运算符常用于值,而将最后一个表达式的值作为整个表达式的值,逗号运算符常用于循环语句的表达式中,将多个表达式连接成一个表达式,如:循环语句的表达式中,将多个表达式连接成
27、一个表达式,如:for(i=0,j=n;ij;i+,j-)for(i=0,j=n;i=f2=f3=f4(2)设inti1=13,i2=23,i3=33,i4=43i1+i4=i2+i3(3)设charc1=a,c2=A,c3=1(c1=c1+2)!=(c3=c3+1)4/22/20233535安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 求下面各逻辑表达式的值(设a=3,b=4,c=5):(1)a+bc&b=c(2)a|b+c&b-c(3)!(ab)&!c|1(4)!(a+b)+c-1&b+c/24/22/20233636安徽理工大学计算机软件教研室安徽理工大学计
28、算机软件教研室Chapter 2 表达式书写规则:表达式书写规则:1、乘号不能省略。2、括号必须成对出现,均使用圆括号;可以出现多个,但要配对。3、表达式从左到右要在同一基准上书写,无高低之分。4/22/20233737安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 7.7.数据类型的转换数据类型的转换数据类型的转换分为显式数据类型的转换分为显式(强制强制)转换和隐式(自动)转换。转换和隐式(自动)转换。强制转换格式:强制转换格式:或:或:将一种数据类型的值强制转换为另外一种数据类型。常用于对函数的参数将一种数据类型的值强制转换为另外一种数据类型。常用于对函数的参数
29、及返回值的操作。及返回值的操作。假设、为假设、为floatfloat型数据,则型数据,则(int)(x+y)(int)(x+y)强行将强行将+的值转换成整的值转换成整型,型,x x和和y y仍为仍为floatfloat型。型。自动转换:自动转换:在不同类型数据进行混合运算时,系统自动进行的类型转换。在不同类型数据进行混合运算时,系统自动进行的类型转换。逻辑运算符要求操作数是逻辑运算符要求操作数是boolbool型,如果是其他类型,自动转换为型,如果是其他类型,自动转换为boolbool型。转换型。转换方法是:非方法是:非0 0数据转换为数据转换为truetrue,0 0转换为转换为falsef
30、alse。(类型名类型名)表达式表达式类型名类型名(表达式表达式)4/22/20233838安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 50L+5*a-3.0intcharfloatlongintlongdoubledouble4/22/20233939安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 如:(float)a将变量a强制转换为单精度浮点型。(double)a(将a转换成double)(int)(x+y)(将x+y的值转换成整型)注:表达式应用括号括起来。如写成:(int)x+y则只将x转换为型,然后与y相加。注:在强制类型
31、转换时,得到一个所需类型的中间变量,原来变量的类型未发生变化。如:(int)x如x原指定为float型,进行强制类型运算后得到一个int型中间变量,它的值等于x的整数部分,而x的类型不变(仍为float)。4/22/20234040安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 charshortintunsignedlongunsignedlongfloatdoublelongdouble必定的转换必定的转换混合运算时由低向高转换混合运算时由低向高转换自动转换还包括赋值运算时赋值号右端类型向左端类型的转换自动转换还包括赋值运算时赋值号右端类型向左端类型的转换8.8
32、.内部函数内部函数 C/C+C/C+中提供了多种内部函数供用户编程序时直接调用,只需把包含内中提供了多种内部函数供用户编程序时直接调用,只需把包含内部函数的头文件,通过部函数的头文件,通过#include#include 预处理命令装入到程序中。例如,程序中预处理命令装入到程序中。例如,程序中要使用平方根函数要使用平方根函数sqrtsqrt,应该在程序加入:,应该在程序加入:#include math.h“#include math.h“4/22/20234141安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 位运算操作符位运算操作符 C+特有的位运算功能是指进行二
33、进制位的运算,这类运算可特有的位运算功能是指进行二进制位的运算,这类运算可以完成很多汇编级的工作,包括:位逻辑运算和移位运算。以完成很多汇编级的工作,包括:位逻辑运算和移位运算。位逻辑操作符(位逻辑操作符(Bitwise Logical Operators)&按位与按位与(Bitwise AND)a&b|按位或按位或(Bitwise inclusive OR)a|b 按位异或按位异或(Bitwise exclusive OR)ab 按位反按位反(Bitwise NOT)ab设设 x=0 x55(01010101)y=0 x5a(01011010)(1)按位与运算按位与运算 x=01010101
34、 y=01011010&01010000(0 x50)x&y=0 x504/22/20234242安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 位逻辑运算符位逻辑运算符微机中一般以4个字节存放一个实数,以2个字节存放一个整数,最左边一位(最高位)用作数的符号位。为表示数值,一般有:原码:只将最高位作符号位(以0代表正,1代表负),其余各位代表数值本身的绝对值(以二进制表示)。如:+7原码为:00000111;-7原码为:10000111反码:一个数如果值为正,则它的反码与原码相同;一个数如为负,则符号位为1,其余各位是对原码取反。如:+7反码为:00000111;
35、-7反码为:111110004/22/20234343安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 补码:原码和反码不便于计算机运算,因为在运算中要单独处理其符号。因此最好能做到符号位和其它位统一处理,对减法也按加法来处理,这就是补码。如想从十进制数9得到5可用减法:945;已知4的补数为1046,即4和6互补,因此可写成9615,去掉高位1,得5。补码规定:正数:其原码、反码、补码相同;负数:最高位为1,其余各位为原码的相应位取反,然后对整个数加1。如:-7原补码为:11111001,即对+7各位取反加1。如果已知一个负数的补码,要将其转换为十进制数:先对各位取
36、反;再将其转换成十进制;加上负号,减1。也可以将补码中最高位不改动,其余各位取反加1,得到原码。4/22/20234444安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2(2)按位或运算按位或运算 x=01010101 y=01011010|01011111(0 x5f)x|y=0 x5f注意:注意:int x=7;x&8 等于等于1 x&8 等于等于0(3)按位异或运算按位异或运算 x=01010101 y=01011010 00001111(0 x0f)x y=0 x0f(4)按位反运算按位反运算 x=01010101 10101010(0 xaa)x=0 xaa
37、 移位操作符移位操作符 右移位右移位(Right shift)a2 右移右移2位位 左移位左移位(Left shift)b1 左移左移1位位4/22/20234545安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 1.“左移”运算符():用来将一个数的二进制位全部右移若干位,左边补入的数与被移位的数据是否带符号有关。若不带符号数,则补入的数全部为0;若带符号数,则补入的数全部等于原数的最左端位上的原数(即原符号位)。注:右移1位相当于除以2,右移n位相当于除以2n。另:位运算符与赋值运算符结合可组成扩展的赋值运算符,如:&=、|=、=、=、=。例如a&=b相当于a=
38、a&b。4/22/20234646安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 设a=-4,求b=a4二进制数十进制数a-4a40000-24/22/20234747安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 位运算是对字节或字中的实际位进行检测、设置或移位,只适用于字符型和整数型变量以及它们的变体,对其他数据类型不适用。要注意区别接位运算符和逻辑运算符的不同。如x=7,则x&8的值为真(1),而x&8的值为0。关系运算和逻辑运算表达式的结果只能是1或0,而按位运算的结果可以取0或1以外的值。4/22/20234848安徽理工大学计
39、算机软件教研室安徽理工大学计算机软件教研室Chapter 2 求下列各式位运算的结果(1)025(2)025&032(3)064|015(4)071052(5)1524/22/20234949安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 其它运算符其它运算符求字节数运算符sizeof该运算符是单目运算符,运算对象可以是任何类型说明符或变量。注:运算对象必须用圆括号括住;功能是用来测试数据类型所占用的字节数。该运算符优先级和单目算术、逻辑、自增自减运算符同级;该运算符结合性满足右结合。4/22/20235050安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室
40、Chapter 2 2.指针运算符:“*”和“&”3.成员运算符:“-”和“.”4.强制运算符:“()”用来改变表达式的运算顺序,也常用于不同类型的强制转换、函数调用、参数表等,所以称“强制运算符”,优先级别最高。5.下标运算符:“”访问数组中的一个具体元素时,必须通过使用数组名及跟在数组名后的方括号中的下标来实现,这对方括号称下标运算符。4/22/20235151安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 2.4 2.4 指针指针(与数组一块讲与数组一块讲)每个变量在内存中存放都对应一段地址,第一个字节的地址每个变量在内存中存放都对应一段地址,第一个字节的地址
41、就是变量的地址,将存放地址的变量称为指针变量。就是变量的地址,将存放地址的变量称为指针变量。&求地址求地址 变量的地址在编程阶段是不知道的变量的地址在编程阶段是不知道的 在程序中可以使用在程序中可以使用&运算符求得变量的地址。运算符求得变量的地址。int x;int x;&x&x就是变量的地址就是变量的地址1.基本概念4/22/20235252安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 取内容取内容*(*(地址地址)表示根据地址取内容表示根据地址取内容如图中所示,如图中所示,*(&x)*(&x)的值为的值为4 4指针指针指针是一种变量,存放另一个变量的地址。指针
42、是一种变量,存放另一个变量的地址。int x=4;int x=4;int *p;int *p;p=&x;p=&x;p p就是一个指针,存放就是一个指针,存放x x的地址。的地址。p p指向指向x x,*p*p的值为的值为4 4,*p*p就是就是x x。出现出现x x的地方可以用的地方可以用*p*p代替,出现代替,出现*p*p的地方可以用的地方可以用x x代替。代替。10014px4/22/20235353安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 定义定义 例如:例如:int *pint *p;float *q;float *q;指针所指对象的类型。指针所指对象
43、的类型。初始化初始化在定义的同时赋初值,称为指针变量的初始化。在定义的同时赋初值,称为指针变量的初始化。例如:例如:float d=1.5,*p=&dfloat d=1.5,*p=&d;可改写为:可改写为:float d=1.5,*p;float d=1.5,*p;p=&d;/p=&d;/注意不能写做注意不能写做*p=&d*p=&d数据类型数据类型 *标识符;标识符;不是指针名的一部分不是指针名的一部分&d1.5p pd d2.定义及初始化4/22/20235454安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 假定有定义:假定有定义:int*p,a;int*p,a
44、;p=NULL;p=NULL;指针的值为指针的值为NULL(0)NULL(0)表示不指向任何对象。表示不指向任何对象。p=&a;p=&a;p p指向变量指向变量a a。p1=&a;p1=&a;p2=p1;p2=p1;相同类型的指针变量可以相互赋值相同类型的指针变量可以相互赋值 例例,假设有定义假设有定义:intint a,*p;a,*p;float f;float f;则以下形式不允许:则以下形式不允许:()p=&f;p=&f;()p=100;p=100;赋值运算3.运算4/22/20235555安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 p+n(p+n(或或p
45、-n)p-n):p+np+n:指向后面的第个元素。指向后面的第个元素。p-np-n:指向前面的第个元素。指向前面的第个元素。p+np+n的值为:的值为:p p的值的值n*n*sizeof(psizeof(p指向的类型)指向的类型)如,有定义:如,有定义:int a,*p=&a;int a,*p=&a;假设假设a a的地址为的地址为1000,1000,则:则:p p的值为的值为10001000p+3p+3的值为:的值为:1000+3*sizeof(int)=1000+3*4=10121000+3*sizeof(int)=1000+3*4=1012算术运算4/22/20235656安徽理工大学计算
46、机软件教研室安徽理工大学计算机软件教研室Chapter 2 自增(自增(+)和自减()和自减(-)p+p+、+p+p、p-p-、-p-p自增或自减后自增或自减后p p指向前一个或后一个元素指向前一个或后一个元素 指针相减指针相减两个类型相同的指针可以相减,结果为这两个地址差之间能够存放两个类型相同的指针可以相减,结果为这两个地址差之间能够存放的数据个数(数据类型为指针所指的类型)。的数据个数(数据类型为指针所指的类型)。如,有定义:int*p1,*p2;假设p1指向1000,p2指向1008,则p2p1的值为:(1008-1000)/sizeof(int)=2*p+*(p+)*pp+(*p)+
47、*p(*p)+4/22/20235757安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 New New 运算符运算符形式形式:指针指针=new=new 数据类型数据类型;指针指针=new=new 数据类型数据类型(初值初值););或或4.new和delete4/22/20235858安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 Delete Delete 运算符运算符用于用于释放释放用用newnew申请的申请的动态存储空间动态存储空间,形式为:,形式为:delete 指针指针;delete 指针指针;或或无需指明数组长度无需指明数组长度
48、只能释放由只能释放由new申申请的动态变量请的动态变量例:例:int a=3,*p=&a,*q;q=new int(6);delete p;()delete q;4/22/20235959安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 形式:形式:typedef typedef 数据类型数据类型 新的数据类型名;新的数据类型名;该该语语句句作作用用是是为为已已有有的的数数据据类类型型定定义义新新的的名名称称,使使其其更更符符合合WindowsWindows系系统统中中的的相相关关对对象象的的含含义义,可可以以像像标标准准C+C+中中的的数数据据类类型型一样使用这些新
49、定义的类型。如:一样使用这些新定义的类型。如:typedef char CHAR;typedef char CHAR;CHAR c1;/CHAR c1;/等价于等价于char c1;char c1;2.5 typedef2.5 typedef语句语句4/22/20236060安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2 例例2-32-3 用代码表达下列命题:用代码表达下列命题:1.1.能且只能被和中的一个数整除。能且只能被和中的一个数整除。解:解:或或 2.ch2.ch是大写字母。是大写字母。解:解:思考思考 上述命题可否描述为上述命题可否描述为 A A chch
50、=A&ch=Z 2.6 2.6 应用举例应用举例4/22/20236161安徽理工大学计算机软件教研室安徽理工大学计算机软件教研室Chapter 2#includeiostream.h#includeiostream.h#includeiomanip.h#includeiomanip.h#includemath.h#includemath.hvoid main()void main()float a,b,c;float a,b,c;double l,s;double l,s;coutcoutca;cinca;b=sqrt(c*c-a*a);b=sqrt(c*c-a*a);/sqrt/sqrt为