



版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第五章第五章 数据类型数据类型2n任何程序,不管以何种语言写成,均可任何程序,不管以何种语言写成,均可以视为刻划了一个操作集合。并将以一以视为刻划了一个操作集合。并将以一定顺序作用到一定数据上。定顺序作用到一定数据上。n语言的基本不同在于:语言的基本不同在于:n允许的数据类型允许的数据类型n允许的操作类型允许的操作类型n控制操作顺序的机制。控制操作顺序的机制。3本章主要内容本章主要内容n数据类型的基本概念及相关属性数据类型的基本概念及相关属性n基本数据类型基本数据类型n复合数据类型复合数据类型45.1 类型和对象的性质类型和对象的性质n数据对象数据对象、变量和常量变量和常量n数据类型及其规约数
2、据类型及其规约n简单数据类型的规约与实现简单数据类型的规约与实现n数据对象的声明数据对象的声明n类型检查和类型转换类型检查和类型转换n数据对象的初始化数据对象的初始化5数据对象数据对象n计算机的数据存储在结构上是简单的,计算机的数据存储在结构上是简单的,通常是由位串构成的字节。通常是由位串构成的字节。n而语言虚拟机的数据存储则有更复杂的而语言虚拟机的数据存储则有更复杂的组织,如:数组、栈、数、字符串、以组织,如:数组、栈、数、字符串、以及其它存在于程序执行中不同点的数据。及其它存在于程序执行中不同点的数据。n我们称虚拟机上一个或多个数据片断运我们称虚拟机上一个或多个数据片断运行时的组合为数据对
3、象。行时的组合为数据对象。6数据对象数据对象n在程序运行中,存在许多不同类型的不同数据在程序运行中,存在许多不同类型的不同数据对象。这些对象及其相互关系在运行时动态变对象。这些对象及其相互关系在运行时动态变化。化。n有些数据对象是程序员定义的,如变量、常量、有些数据对象是程序员定义的,如变量、常量、数组、文件等。程序员通过声明和语句显式地数组、文件等。程序员通过声明和语句显式地创建和操作它们。创建和操作它们。 n有些数据对象是系统定义的,不可为程序员直有些数据对象是系统定义的,不可为程序员直接访问。如:运行时存储栈、子程序激活记录、接访问。如:运行时存储栈、子程序激活记录、文件缓冲、自由空间列
4、表等。这些数据对象在文件缓冲、自由空间列表等。这些数据对象在运行需要时自动产生,不需要时删除。运行需要时自动产生,不需要时删除。7数据对象n标量数据对象:nNumeric (Integers, Real)nBooleansnCharactersnEnumerationsn复合对象:nStringnPointern结构化对象:nArraysnRecordsnListsnSetsn抽象数据对象:nClassesn活动对象:nTasksnProcesses8数据对象数据对象n数据对象表示了数据值的一个容器,是值被数据对象表示了数据值的一个容器,是值被存放和检索的地方,而数据值是在存储器中存放和检索的
5、地方,而数据值是在存储器中以一种特定的位模式表示。以一种特定的位模式表示。n数据对象和数据值在大多数语言中均是明确数据对象和数据值在大多数语言中均是明确区分的,如图所示。区分的,如图所示。9数据对象数据对象n每个数据对象有生命期,在生命期内可用来每个数据对象有生命期,在生命期内可用来存放数据值。存放数据值。n数据对象可分为简单数据对象和数据结构数据对象可分为简单数据对象和数据结构n数据结构数据结构 其他数据对象的聚集。其他数据对象的聚集。n数据对象在其生命期中涉及各种绑定,虽然数据对象在其生命期中涉及各种绑定,虽然其属性不变,但绑定可动态改变。其属性不变,但绑定可动态改变。10数据对象:属性和
6、绑定数据对象:属性和绑定n重要的属性和绑定有:重要的属性和绑定有:1、类型、类型n通常在程序翻译时,关联数据对象和它可能的取值集合。通常在程序翻译时,关联数据对象和它可能的取值集合。2、位置、位置n通常不由程序员规定,而是系统存储管理负责。通常不由程序员规定,而是系统存储管理负责。3、值、值n由赋值操作完成绑定。由赋值操作完成绑定。4、名、名n通常在声明时完成绑定,但可被子程序调用和返回修改通常在声明时完成绑定,但可被子程序调用和返回修改5、部件、部件n通常用指针值相连,可通过指针的修改而变动。通常用指针值相连,可通过指针的修改而变动。 返回11变量和常量变量和常量n程序员通过变量来显式地定义
7、和命名数据对象。程序员通过变量来显式地定义和命名数据对象。n一个简单的变量是有名字的简单数据对象,其一个简单的变量是有名字的简单数据对象,其内容可以发生变化。内容可以发生变化。n常量是具有名字的数据对象,其值在其生命期常量是具有名字的数据对象,其值在其生命期内永久不变。一个文字(或文字常量)是一个内永久不变。一个文字(或文字常量)是一个常量,其名是其值的书写表示,如常量,其名是其值的书写表示,如21表示值为表示值为21的整数常量。的整数常量。n程序员定义的常量程序员定义的常量其名字由程序员指定。其名字由程序员指定。n常量的绑定由编译器完成。常量的绑定由编译器完成。n如如C语言中,语言中,#de
8、fine MAX 20n语句语句MAX=4是非法的。是非法的。 返回12数据类型数据类型n一个数据类型是一类数据对象加上创建及操作一个数据类型是一类数据对象加上创建及操作它们的一组操作。它们的一组操作。n每个语言有一个基本数据类型集合,是语言固每个语言有一个基本数据类型集合,是语言固有的。有的。n有的语言还提供了设施允许程序员定义新数据类型。有的语言还提供了设施允许程序员定义新数据类型。n有的新语言还允许类型本身被语言操作(高阶能有的新语言还允许类型本身被语言操作(高阶能力)。力)。n每个数据类型都包括对其相关性质的每个数据类型都包括对其相关性质的规约规约以及以及在计算机中的具体实现在计算机中
9、的具体实现13数据类型的规约数据类型的规约n数据类型的规约包括:数据类型的规约包括:1、区分该类型的数据对象的属性、区分该类型的数据对象的属性2、该类型数据对象可具有的值、该类型数据对象可具有的值3、定义该类型数据对象可能处理的操作、定义该类型数据对象可能处理的操作n例如:数组数据类型的规约例如:数组数据类型的规约n属性:维数、每维的下标范围、元素的数据类型等。属性:维数、每维的下标范围、元素的数据类型等。n值:形成数值元素有效值的数的集合。值:形成数值元素有效值的数的集合。n操作:选择个体数组元素、创建数组、改变数组形操作:选择个体数组元素、创建数组、改变数组形状,访问下标上下界、完成数组间
10、的算术操作等。状,访问下标上下界、完成数组间的算术操作等。返回14数据类型的实现数据类型的实现n数据类型的实现包括:数据类型的实现包括:1、存储表示:用于在计算机存储器中表示数、存储表示:用于在计算机存储器中表示数据对象。据对象。2、数据类型操作是以特殊的算法或过程表示、数据类型操作是以特殊的算法或过程表示的方式,这些算法和过程操纵数据对象的存的方式,这些算法和过程操纵数据对象的存储表示。储表示。返回15数据类型的规约与实现数据类型的规约与实现n从语法表示来看,规约和实现大体上独从语法表示来看,规约和实现大体上独立于特定的语法形式。立于特定的语法形式。n属性:表示为声明或类型定义属性:表示为声
11、明或类型定义n值:表示为文字或定义的常量值:表示为文字或定义的常量n操作:可由特殊的符号、固有过程或函数、操作:可由特殊的符号、固有过程或函数、或隐含地通过其他语言元素的特殊组合来调或隐含地通过其他语言元素的特殊组合来调用。用。16基本(简单)数据类型的规约基本(简单)数据类型的规约n简单数据对象包含单个数据值,这类数据对象简单数据对象包含单个数据值,这类数据对象称为基本数据类型。称为基本数据类型。n虽然不同的语言有不同的基本类型集合,但整虽然不同的语言有不同的基本类型集合,但整数、实数、字符、布尔、枚举、指针等基本都数、实数、字符、布尔、枚举、指针等基本都是有的。但各自精确的规约对不同语言会
12、有差是有的。但各自精确的规约对不同语言会有差异。异。17简单数据类型的规约:属性简单数据类型的规约:属性n数据对象的基本属性(如类型和名字)通常在数据对象的基本属性(如类型和名字)通常在生命期中是不变的。生命期中是不变的。n有的属性可存放在描述子中,作为数据对象的有的属性可存放在描述子中,作为数据对象的一部分在运行时出现。一部分在运行时出现。n有的属性只用于确定其存储表示,在执行中不有的属性只用于确定其存储表示,在执行中不显式地出现。显式地出现。n属性值和数据对象的值是不同的。属性值和数据对象的值是不同的。18简单数据类型的规约:值简单数据类型的规约:值n数据对象的类型确定了它可包含的可能数据
13、对象的类型确定了它可包含的可能值集,但在执行中任一点,只包含一个值集,但在执行中任一点,只包含一个来自该集合的单值。来自该集合的单值。n基本数据类型定义的值集通常是有序集,基本数据类型定义的值集通常是有序集,有最小值和最大值。有最小值和最大值。19简单数据类型的规约:操作简单数据类型的规约:操作(1)n操作确定数据对象被处理的方式。操作确定数据对象被处理的方式。n操作可能是原始操作,也可是用户定义操作。操作可能是原始操作,也可是用户定义操作。n操作是一个数学函数,对一给定输入参数,有操作是一个数学函数,对一给定输入参数,有定义的、唯一确定的结果。每个操作有作用域、定义的、唯一确定的结果。每个操
14、作有作用域、值域。操作的动作定义了对给定参数的结果。值域。操作的动作定义了对给定参数的结果。n算法可用于刻划操作的动作,但其他规约也是算法可用于刻划操作的动作,但其他规约也是可以的。如可用乘法表来刻划乘法的动作。可以的。如可用乘法表来刻划乘法的动作。20简单数据类型的规约:操作简单数据类型的规约:操作(2)n操作的基调(操作的基调(signature)定义了操作的作用域中定义了操作的作用域中参数的数量、顺序和类型,以及结果值域的顺序和类参数的数量、顺序和类型,以及结果值域的顺序和类型。数学记号:型。数学记号:OP:type1type2typentype也称为函数原形也称为函数原形n操作有单元、
15、二元和多元。操作有单元、二元和多元。n动作的精确规约需要比参数类型更多的信息。动作的精确规约需要比参数类型更多的信息。n特别地,参数类型的存储表示通常确定那些参数如何被操作,特别地,参数类型的存储表示通常确定那些参数如何被操作,如:二进制数的乘法和十进制数的乘法有很大不同。如:二进制数的乘法和十进制数的乘法有很大不同。n这样,在操作的规约中,常给出动作的非形式的描述。这样,在操作的规约中,常给出动作的非形式的描述。n一旦参数的存储表示确定,动作的精确规约是操作实一旦参数的存储表示确定,动作的精确规约是操作实现的一部分。现的一部分。21简单数据类型的规约:操作简单数据类型的规约:操作(3)n有时
16、难于确定操作的精确规约为数学函数,有有时难于确定操作的精确规约为数学函数,有四个主要因素。四个主要因素。1、操作对某些输入无定义。、操作对某些输入无定义。2、隐含的参数、隐含的参数操作会访问其他隐含参数(全局操作会访问其他隐含参数(全局变量;非局部变量)。变量;非局部变量)。3、副作用(隐含结果)、副作用(隐含结果)可能修改其他数据对象。可能修改其他数据对象。4、自我修改(历史敏感性)、自我修改(历史敏感性)操作修改自己的内操作修改自己的内部结构、或是执行中保持的局部数据、或是代码。部结构、或是执行中保持的局部数据、或是代码。n操作的结果还依赖于历史调用。操作的结果还依赖于历史调用。n例:随机
17、数产生器。例:随机数产生器。nLISP中可自我修改代码。中可自我修改代码。22基本数据类型的实现基本数据类型的实现n存储表示存储表示n基本类型的存储受低层计算机的影响很大。基本类型的存储受低层计算机的影响很大。n如:整数或实数几乎就是在低层硬件中使用的数如:整数或实数几乎就是在低层硬件中使用的数的整数或浮点数表示。的整数或浮点数表示。n对字符值,硬件或操作系统字符码被使用。对字符值,硬件或操作系统字符码被使用。n基本理由:基本理由:n如使用硬件存储表示,则该类型数据基本操作可如使用硬件存储表示,则该类型数据基本操作可以用硬件提供的基本操作实现。以用硬件提供的基本操作实现。n否则,将使用软件仿真
18、,从而带来效率损失。否则,将使用软件仿真,从而带来效率损失。 23基本数据类型的实现基本数据类型的实现n基本数据类型的属性被类似地处理。基本数据类型的属性被类似地处理。1、为了效率,很多语言设计为属性由编译器确定。、为了效率,很多语言设计为属性由编译器确定。n属性本身并不存放在运行时存储表示中属性本身并不存放在运行时存储表示中存储表示通常直接使存储表示通常直接使用硬件,如:用硬件,如:C、Fortran、Pascal等。等。2、数据对象的属性可存放在描述子中作为运行时数据对象的一、数据对象的属性可存放在描述子中作为运行时数据对象的一部分,如:部分,如:LISP、Prolog等,这里灵活性是主要
19、目标。通常等,这里灵活性是主要目标。通常硬件不提供对描述子的直接表示。硬件不提供对描述子的直接表示。n数据对象的表示通常独立于存储位置,这样给定类型数据对象的表示通常独立于存储位置,这样给定类型的每个对象有相同的表示(除位置不同),通常用需的每个对象有相同的表示(除位置不同),通常用需要的内存块的尺寸(大小)来描述,同时也涉及属性要的内存块的尺寸(大小)来描述,同时也涉及属性和值在块中的布局。和值在块中的布局。n通常内存块的每一个字或字节的地址用于表示数据对通常内存块的每一个字或字节的地址用于表示数据对象的位置。象的位置。24基本数据类型的实现基本数据类型的实现n操作的实现操作的实现1、直接作
20、为硬件操作、直接作为硬件操作n如:整数表示为硬件整数,如:整数表示为硬件整数,+,也直接用硬件实现。,也直接用硬件实现。2、作为过程或函数子程序、作为过程或函数子程序n如:平方根操作。如:平方根操作。n如数据对象不使用硬件表示,则所有操作必须是软件仿真,如数据对象不使用硬件表示,则所有操作必须是软件仿真,通常以子程序的形式。通常以子程序的形式。3、作为、作为In-line(内嵌)代码序列。(内嵌)代码序列。n这也是操作的软件实现形式,但不是使用短小的子程序,这也是操作的软件实现形式,但不是使用短小的子程序,而是将子程序中操作代码拷贝到程序中的调用点。而是将子程序中操作代码拷贝到程序中的调用点。
21、返回25数据对象的声明数据对象的声明n编写程序时,程序员确定数据对象的名字和类编写程序时,程序员确定数据对象的名字和类型。还要确定:生命期、在程序中的活动范围、型。还要确定:生命期、在程序中的活动范围、相关操作等。相关操作等。n声明:一种程序语句,告知语言翻译器关于数声明:一种程序语句,告知语言翻译器关于数据对象的信息。据对象的信息。n如声明语句放在特定的程序或类定义中,则指明了如声明语句放在特定的程序或类定义中,则指明了对象希望的生命期。对象希望的生命期。n声明可以是显式的,也可以是隐含的或缺省的。声明可以是显式的,也可以是隐含的或缺省的。声明可以为数据对象赋上初始值,也可指定常声明可以为数
22、据对象赋上初始值,也可指定常量值。量值。26数据对象的声明数据对象的声明n操作的声明操作的声明n翻译时需要的关于操作的信息,主要是其基翻译时需要的关于操作的信息,主要是其基调调signature。n对基本操作,不需显式的参数类型和结果类对基本操作,不需显式的参数类型和结果类型声明,是语言中固有的。型声明,是语言中固有的。n对程序员定义的操作,则必须指定之。对程序员定义的操作,则必须指定之。n如:如:sub: intfloatfloat = float Sub (int x,float y) 27声明的目的声明的目的1、选择存储表示、选择存储表示n声明可以给语言翻译器提供关于数据类型和数据对象属
23、性的声明可以给语言翻译器提供关于数据类型和数据对象属性的信息,使得翻译器可以确定数据对象的最佳的存储表示,从信息,使得翻译器可以确定数据对象的最佳的存储表示,从而减少整体的存储需求和被翻译程序的执行时间。而减少整体的存储需求和被翻译程序的执行时间。2、存储管理、存储管理声明使其更为高效声明使其更为高效n声明可以提供关于数据对象生命期的信息,从而使得在程序声明可以提供关于数据对象生命期的信息,从而使得在程序执行过程中进行更高效的存储管理。执行过程中进行更高效的存储管理。n如:在如:在C语言中,在子程序头部声明的数据对象有相同的生命语言中,在子程序头部声明的数据对象有相同的生命期,这样可以在进入子
24、程序时分配一个整体的块来存放所有期,这样可以在进入子程序时分配一个整体的块来存放所有的数据对象,而在退出子程序时释放。的数据对象,而在退出子程序时释放。n其它动态创建的数据对象则需单独处理。其它动态创建的数据对象则需单独处理。28声明的目的声明的目的3、多态操作、多态操作包括重载和真正多态包括重载和真正多态n大多数语言均使用特殊的符号来表示一组不同的操作,具体大多数语言均使用特殊的符号来表示一组不同的操作,具体操作的选择将依赖于参数的数据类型。此即所谓重载。如:操作的选择将依赖于参数的数据类型。此即所谓重载。如:可以是整数加、实数加,甚至可用于字符和字符串操作。可以是整数加、实数加,甚至可用于
25、字符和字符串操作。n重载是一个在语法层次上处理的概念。由编译器处理。重载是一个在语法层次上处理的概念。由编译器处理。n真正的多态通常是语义级别的概念,操作符的具体动作的确真正的多态通常是语义级别的概念,操作符的具体动作的确定是在运行时进行。如:函数语言中,类型可以作为参数带定是在运行时进行。如:函数语言中,类型可以作为参数带入,从而使函数的动作的选择依据类型实参而确定。恒等函入,从而使函数的动作的选择依据类型实参而确定。恒等函数就是典型的多态。数就是典型的多态。n面向对象的继承机制也提供了所谓的包含多态性,即子类的面向对象的继承机制也提供了所谓的包含多态性,即子类的对象可用于父类对象出现的地方
26、。对象可用于父类对象出现的地方。4、类型检查、类型检查最重要的目标,属语义检查,目标是排最重要的目标,属语义检查,目标是排错,分静态或动态类型检查。类型检查提供了很好的错,分静态或动态类型检查。类型检查提供了很好的防止错误的机制。防止错误的机制。返回29类型检查和类型转换类型检查和类型转换n计算机硬件固有的数据存储表示通常不含类型信息。计算机硬件固有的数据存储表示通常不含类型信息。数据上的基本原始操作也不需类型检查。如一个位串:数据上的基本原始操作也不需类型检查。如一个位串:1110010011n可能是整数、实数、字符串、或指令,没有办法来区可能是整数、实数、字符串、或指令,没有办法来区分。分
27、。n硬件提供的基本操作(如加法),不能检查其参数是硬件提供的基本操作(如加法),不能检查其参数是否为整数,他们仅仅是位串。否为整数,他们仅仅是位串。n汇编语言或机器语言编程中常见的错误源于错误的操汇编语言或机器语言编程中常见的错误源于错误的操作类型,这种错误难于发现,因为操作并不以明显的作类型,这种错误难于发现,因为操作并不以明显的方式失败。操作可进行,但结果没有意义。方式失败。操作可进行,但结果没有意义。n有时这种错误可在连续的一串操作后出错,有时程序停止也有时这种错误可在连续的一串操作后出错,有时程序停止也不出错。不出错。30类型检查类型检查n类型检查:指检查程序中每个操作均接类型检查:指
28、检查程序中每个操作均接收了正确数目的正确类型参数,可在运收了正确数目的正确类型参数,可在运行时完成,即动态类型检查;或编译时行时完成,即动态类型检查;或编译时检查,即静态类型检查。检查,即静态类型检查。 n高级语言的主要优点之一:可提供对所高级语言的主要优点之一:可提供对所有(或几乎所有)操作的类型检查。有(或几乎所有)操作的类型检查。31动态类型检查动态类型检查n需类型标志,不需对变量声明(即变量需类型标志,不需对变量声明(即变量是无类型的)。是无类型的)。n优点:编程的灵活性。程序员不需考虑类型优点:编程的灵活性。程序员不需考虑类型问题,具有较高灵活性。问题,具有较高灵活性。n缺点:缺点:
29、n程序难于调试,不能完全消去所有参数类型错误。程序难于调试,不能完全消去所有参数类型错误。程序测试不可能检测所有的路径。程序测试不可能检测所有的路径。n需要在执行过程中保持类型信息,需存储空间。需要在执行过程中保持类型信息,需存储空间。n动态检查需以软件实现,有时间花销。动态检查需以软件实现,有时间花销。32静态类型检查静态类型检查n需要的信息通常由程序员在声明中及在其他语需要的信息通常由程序员在声明中及在其他语言结构中提供。需要:言结构中提供。需要:1、对每个操作,其参数的数量、顺序、类型及结果、对每个操作,其参数的数量、顺序、类型及结果类型。类型。2、对每个变量,被关联的命名数据对象的类型
30、。、对每个变量,被关联的命名数据对象的类型。3、每个常量数据对象的类型。、每个常量数据对象的类型。n编译器在翻译的早期阶段收集声明中的类型信编译器在翻译的早期阶段收集声明中的类型信息,以后将用于类型检查。息,以后将用于类型检查。n静态检查涉及语言的多个方面:声明、数据控静态检查涉及语言的多个方面:声明、数据控制结构、分开编译等。制结构、分开编译等。33静态与动态类型检查静态与动态类型检查n静态检查将针对程序中的所有操作进行,所有静态检查将针对程序中的所有操作进行,所有可能的执行路径均被检查。因此,关于类型错可能的执行路径均被检查。因此,关于类型错误的进一步测试是不需要的,因而不需类型标误的进一
31、步测试是不需要的,因而不需类型标记和运行时类型检查。记和运行时类型检查。n在多数语言中,对某些语言结构的静态检查在在多数语言中,对某些语言结构的静态检查在某种情况下是不可能的。解决方案:某种情况下是不可能的。解决方案:n采用动态类型检查或不检查。采用动态类型检查或不检查。 34类型检查类型检查n强类型强类型n如果我们可以静态地检测程序中的所有类型错误,如果我们可以静态地检测程序中的所有类型错误,则称语言是强赋类型的。则称语言是强赋类型的。n通常类型为程序提供了一个安全层次。通常类型为程序提供了一个安全层次。n一个函数一个函数f: SR称为类型安全的,如果称为类型安全的,如果f的执行不会产生的执
32、行不会产生R以外的值。以外的值。n类型安全的操作均不需动态检查。类型安全的操作均不需动态检查。n很少有语言是真正强类型的。很少有语言是真正强类型的。n类型推导类型推导n如果解释不会出现二义性,则类型声明可以省去。如果解释不会出现二义性,则类型声明可以省去。可由语言实现推导出失去的类型信息。可由语言实现推导出失去的类型信息。 35类型转换和类型的强制转换类型转换和类型的强制转换n如果在类型检查中,参数的实际类型和操作期望的类如果在类型检查中,参数的实际类型和操作期望的类型间出现不匹配,则有两种处理方案:型间出现不匹配,则有两种处理方案:1、指出出错、指出出错2、通过强制(隐式的类型转换)来改变实
33、际参数的类型为正确、通过强制(隐式的类型转换)来改变实际参数的类型为正确类型。类型。n类型转换的基调为:类型转换的基调为:nconversion-op : type1type2n将一个对象变为另一类型的对象。将一个对象变为另一类型的对象。n大多数语言以两种方式提供类型转换:大多数语言以两种方式提供类型转换:1、作为固有函数,程序员可显式地调用。、作为固有函数,程序员可显式地调用。n如:将实数变成整数,如:将实数变成整数,Pascal中的中的round,C中的中的(int) x2、作为强制,自动在类型失配时调用。、作为强制,自动在类型失配时调用。n如:整数和实数间相加,总是先将整数转变为实数。如
34、:整数和实数间相加,总是先将整数转变为实数。36类型转换和类型的强制转换类型转换和类型的强制转换n强制的基本原则是不失信息。强制的基本原则是不失信息。n这类强制称为这类强制称为widening或或promotion。n如强制会丢失信息,则称为变窄(如强制会丢失信息,则称为变窄(narrowing)n类型转换可能需要数据对象在运行时存储表示的改类型转换可能需要数据对象在运行时存储表示的改变,如:变,如:COBOL和和PL/1中,数值以字符串方式存中,数值以字符串方式存放,要相加需先转换,结果又要转换为字符串。放,要相加需先转换,结果又要转换为字符串。n有的语言中不提供类型强制,类型不匹配即被视为
35、有的语言中不提供类型强制,类型不匹配即被视为出错。出错。n而有的语言则尽可能在不匹配时采用强制(如而有的语言则尽可能在不匹配时采用强制(如C)。)。返回37赋值和初始化赋值和初始化n赋值是一基本操作,改变值到数据对象的绑定,赋值是一基本操作,改变值到数据对象的绑定,这个改变是操作的副作用。这个改变是操作的副作用。n有的语言中,赋值语句也返回值(作为表达式有的语言中,赋值语句也返回值(作为表达式处理),该返回值包含被赋值拷贝的数据对象。处理),该返回值包含被赋值拷贝的数据对象。nPascal中,赋值的规约为:中,赋值的规约为:Assignment (:=) : integer1integer2v
36、oid.ninteger2值赋给值赋给integer1无显式返回。无显式返回。nC中,规约为:中,规约为:Assignment (=) : integer1integer2integer3ninteger2值的拷贝赋给值的拷贝赋给integer1,n同时创建并返回包含同时创建并返回包含integer2值的新数据对象值的新数据对象integer3.38赋值赋值n考虑赋值考虑赋值 X := Xn右边的右边的X称右端值,用于引用包含在命名数据对象称右端值,用于引用包含在命名数据对象中的值,中的值,r-值。值。n左边的左边的X用于引用将包含新值的数据对象的位置,用于引用将包含新值的数据对象的位置,称为
37、左值,称为左值,l-值。值。n赋值操作定义为:赋值操作定义为:1、计算第一个操作数表达式的左值(存储位置)。、计算第一个操作数表达式的左值(存储位置)。2、计算第二个操作数表达式的右值。、计算第二个操作数表达式的右值。3、将右值赋给左值对象。、将右值赋给左值对象。4、返回右值作为操作的结果。、返回右值作为操作的结果。39赋值赋值n赋赋值值的的两两个个不不同同视视角角(A=B)40初始化初始化n未初始化变量(或未初始化数据对象)是一个数据对未初始化变量(或未初始化数据对象)是一个数据对象,已被创建,但未赋值,即有象,已被创建,但未赋值,即有l-值,但没有值,但没有r-值。值。n创建对象仅涉及存储
38、块的分配,块中原有位模式不会创建对象仅涉及存储块的分配,块中原有位模式不会改变。改变。n有的语言创建时不需初始化,初始化是在以后显式地有的语言创建时不需初始化,初始化是在以后显式地通过赋值进行的。也可以在变量声明时进行显式的初通过赋值进行的。也可以在变量声明时进行显式的初始化工作,此时,需要编译器产生相应的赋值代码并始化工作,此时,需要编译器产生相应的赋值代码并插入到目标程序中。插入到目标程序中。n在变量声明后立即进行初始化工作是程序员应有的良在变量声明后立即进行初始化工作是程序员应有的良好习惯之一。好习惯之一。n有的语言,创建时自动初始化(隐式初始化)。有的语言,创建时自动初始化(隐式初始化
39、)。n未初始化变量是程序错误的重要原因之一。未初始化变量是程序错误的重要原因之一。返回415.2 基本数据类型基本数据类型 n整数整数n浮点实数浮点实数n定点实数定点实数n枚举枚举n布尔布尔42数值数据类型:整数数值数据类型:整数n规约:整数类型的对象除了其类型外,通常没规约:整数类型的对象除了其类型外,通常没有其它属性。该类型的整数值的集合形成了数有其它属性。该类型的整数值的集合形成了数学中研究的无限整数集的一个在有限界内的有学中研究的无限整数集的一个在有限界内的有序子集。序子集。n最大整数值有时被表示为一个定义的常量,如:最大整数值有时被表示为一个定义的常量,如:PASCAL中的中的max
40、int,其实际值由语言实现,其实际值由语言实现者根据具体的计算机硬件确定。者根据具体的计算机硬件确定。nC语言有四种不同的整数规约:语言有四种不同的整数规约:int、short、long、char。43数值数据类型:整数(操作)数值数据类型:整数(操作)n整数数据对象上的操作:整数数据对象上的操作:n算术操作:二元算术操作的规约为:算术操作:二元算术操作的规约为:nBinOp : integer integer integern二元操作包括:、二元操作包括:、/、mod等。等。n一元算术操作的规约为:一元算术操作的规约为:UnaryOp : integer integern一元操作有:、以及其
41、它,如:绝对值。一元操作有:、以及其它,如:绝对值。44数值数据类型:整数(操作)数值数据类型:整数(操作)n关系操作:关系操作: nRelOp : integer integer Booleann关系操作有:大于、小于、相等、不等、等等关系操作有:大于、小于、相等、不等、等等n赋值:赋值:nassignment : integer integer voidnassignment : integer integer integern位操作:也分二元和一元。如:位操作:也分二元和一元。如:&、|、 realMax: real real real47数值数据类型:浮点实数数值数据类型:浮点
42、实数(实现实现)n浮点实数的存储表示通常基于底层的硬件表示,浮点实数的存储表示通常基于底层的硬件表示,其中存储位置被分为尾数和指数。在大多数语其中存储位置被分为尾数和指数。在大多数语言实现,言实现,IEEE 标准标准754被用为浮点数定义的被用为浮点数定义的标准。标准。n有单精度和双精度浮点数之分。二者通常由硬有单精度和双精度浮点数之分。二者通常由硬件算术操作支持其加、减、乘、除,而求幂操件算术操作支持其加、减、乘、除,而求幂操作通常由软件仿真。作通常由软件仿真。n如果同时支持单精度和双精度,则必须给予程如果同时支持单精度和双精度,则必须给予程序员相应的声明机制。序员相应的声明机制。返回48数
43、值数据类型:定点实数数值数据类型:定点实数(规约规约)n大多数硬件包含了整数和浮点数对象,然而,大多数硬件包含了整数和浮点数对象,然而,有很多应用需要特定的有理数,如:表示钱的有很多应用需要特定的有理数,如:表示钱的元和分的数据对象。这些数不能写成整数或浮元和分的数据对象。这些数不能写成整数或浮点数。因此,需要定点数。点数。因此,需要定点数。n定点数表示为固定长度的数位,在给定位置为定点数表示为固定长度的数位,在给定位置为小数点。如,小数点。如,COBOL语言中,有如下声明:语言中,有如下声明:X PICTURE 999V9949数值数据类型:定点实数数值数据类型:定点实数(实现实现)n定点实
44、数可直接由硬件支持或用软件仿真。如定点实数可直接由硬件支持或用软件仿真。如PL/1中,中,DECLARE X FIXED DECIMAL(10,3),), Y FIXED DECIMAL(10,2),), Z FIXED DECIMAL(10,2););nX为带为带3个小数位的十位十进制数,个小数位的十位十进制数,Y和和Z有两个小数位。有两个小数位。X的的比例因子比例因子SF为为3,Y和和Z为为2。nvalue(X) = rvalue(X) 10-SFn即,即,X值为值为103.421,其右值为,其右值为103421。n考虑语句:考虑语句:Z X Yn实际加法的代码为:实际加法的代码为:Z (
45、X 10Y)/ 10n考虑考虑X Y,则:,则:n积积 rvalue(X) rvalue(Y)nSF = SF(X) + SF(Y),SF为小数点位置为小数点位置50数值数据类型:实数的不同表示数值数据类型:实数的不同表示n实实数数1.5的的不不同同表表示示返回51基本数据类型:枚举类型基本数据类型:枚举类型n我们通常希望一个变量只在一组符号值中选一我们通常希望一个变量只在一组符号值中选一值。如:变量值。如:变量StudentClass只有四种可能值:只有四种可能值:freshman, sophomore, junior, 和和senior。当然,可以用整数来代表这四者,但必须由程当然,可以用
46、整数来代表这四者,但必须由程序员来维护这类变量的操作安全性及使用的类序员来维护这类变量的操作安全性及使用的类型正确性。型正确性。n规约:枚举是一个不同值的有序列表,由程序规约:枚举是一个不同值的有序列表,由程序员确定其文字名及它们的顺序。如员确定其文字名及它们的顺序。如C中:中:Emun StudentClass Fresh, Soph, Junior, Senior;Emun EmploySex Male, Female;52基本数据类型:枚举类型基本数据类型:枚举类型(实现实现)n枚举类型的基本操作为关系操作、赋值,枚举类型的基本操作为关系操作、赋值,以及后继和前驱。以及后继和前驱。n实现
47、:枚举类型数据对象的存储表示是实现:枚举类型数据对象的存储表示是直接的,在枚举序列中的每个值在运行直接的,在枚举序列中的每个值在运行时被表示为整数,通常为时被表示为整数,通常为0、1、2、之一。有的语言也可由程序员指定值。之一。有的语言也可由程序员指定值。枚举类型上的操作的实现也是直接的,枚举类型上的操作的实现也是直接的,直接使用硬件提供的基本操作。直接使用硬件提供的基本操作。返回53基本数据类型:布尔类型基本数据类型:布尔类型n大多数语言提供数据类型表示大多数语言提供数据类型表示true和和false,通常称为布尔或逻辑类型。通常称为布尔或逻辑类型。n规约:布尔类型的数据对象取二值之一。在某
48、规约:布尔类型的数据对象取二值之一。在某些语言中,可将其考虑为语言定义的枚举类型。些语言中,可将其考虑为语言定义的枚举类型。Type Boolean = (false, true);n其顺序为其顺序为false true。n布尔类型对象上的操作为一般的逻辑操作。布尔类型对象上的操作为一般的逻辑操作。54基本数据类型:布尔类型基本数据类型:布尔类型(实现实现)n实现:布尔数据对象的存储表示是一个实现:布尔数据对象的存储表示是一个二进制位。通常,为了可以直接访问,二进制位。通常,为了可以直接访问,而表示为单个可编址单元。而表示为单个可编址单元。n用一个特殊位来表示,用一个特殊位来表示,0为假,为假
49、,1为真。为真。n或者,或者,0为假,其余非零值为真。为假,其余非零值为真。n也有其它数据类型可用于布尔型的表示,也有其它数据类型可用于布尔型的表示,而而C中没有布尔型。中没有布尔型。返回555.3 复合数据类型复合数据类型n字符串字符串n指针指针n文件文件56字符串字符串n字符串是一个字符构成的序列。几乎所字符串是一个字符构成的序列。几乎所有的语言均有字符串类型。有的语言均有字符串类型。n规约和语法:至少有三种不同的字符串规约和语法:至少有三种不同的字符串类型处理方式:类型处理方式:1、固定声明长度。在程序中声明字符串对象、固定声明长度。在程序中声明字符串对象的固定长度。赋给该对象的值总是该
50、长度的的固定长度。赋给该对象的值总是该长度的字符串。新串值赋给该数据对象将导致长度字符串。新串值赋给该数据对象将导致长度调整:减短或补足。调整:减短或补足。PASCAL和和COBOL中中常采用此技术。常采用此技术。57字符串字符串2、有界变长。字符串数据对象具有固定的最大长度,、有界变长。字符串数据对象具有固定的最大长度,但实际的字符串值长度可以小于此,甚至是空串。但实际的字符串值长度可以小于此,甚至是空串。执行过程中,字符串长度会发生变化,但超长时需执行过程中,字符串长度会发生变化,但超长时需减短。减短。3、无界长度。字符串数据对象可以具有任意长度,、无界长度。字符串数据对象可以具有任意长度
51、,而且长度可以在执行过程中动态地无界变化。而且长度可以在执行过程中动态地无界变化。n前两种方法允许翻译时确定每个字符串数据对前两种方法允许翻译时确定每个字符串数据对象的存储分配。第三种方法需要存储的运行时象的存储分配。第三种方法需要存储的运行时动态分配。动态分配。58字符串:操作字符串:操作(1)1、串联、串联n将两个字符串连接在一起以形成一个长串。如:将两个字符串连接在一起以形成一个长串。如:“BLOCK”|“HEAD”产生产生“BLOCKHEAD”。2、串上的关系操作、串上的关系操作n包括一般的相等、大于、小于等均可用于字符串。包括一般的相等、大于、小于等均可用于字符串。由于字符本身是有序
52、的,因此可以扩展形成字符串由于字符本身是有序的,因此可以扩展形成字符串的字典序。的字典序。3、使用定位下标的子串选择、使用定位下标的子串选择n很多语言提供了选择子串的操作。如:很多语言提供了选择子串的操作。如:FORTRAN中,中,NEXT STR (6:10)将将STR中从位置中从位置6到到10的的5个字符赋给个字符赋给NEXT。如果允许子串选择出现在赋。如果允许子串选择出现在赋值的两边,则其语义必须仔细定义。值的两边,则其语义必须仔细定义。59字符串:操作字符串:操作(2)4、I/O格式格式n程序设计语言中提供的某些字符串操作常常程序设计语言中提供的某些字符串操作常常是为了帮助输出数据的格
53、式化或将格式化的是为了帮助输出数据的格式化或将格式化的输入流分界成小的数据单元。如:输入流分界成小的数据单元。如:C和和FORTRAN中的格式化中的格式化I/O特性。特性。5、使用模式匹配的子串选择、使用模式匹配的子串选择n由于不知道子串在大串中的位置,模式匹配由于不知道子串在大串中的位置,模式匹配则成为一种重要的方法。如:则成为一种重要的方法。如:SNOBOL4就就提供了强大的模式匹配操作。提供了强大的模式匹配操作。60字符串:实现字符串:实现n三种不同的方法使用不同的存储表示。对固定三种不同的方法使用不同的存储表示。对固定长度的字符串操作可以有硬件支持。其它方式长度的字符串操作可以有硬件支
54、持。其它方式则需要软件仿真。则需要软件仿真。返回61指针指针n通常,不是引入一系列可变长的链接数据对象类型,通常,不是引入一系列可变长的链接数据对象类型,而是提供设施来允许使用指针将数据对象链接在一起而是提供设施来允许使用指针将数据对象链接在一起而形成某种结构,这样需要如下几个语言特性:而形成某种结构,这样需要如下几个语言特性:1、基本数据类型指针(、基本数据类型指针(pointer),也称引用或访),也称引用或访问类型。问类型。n指针对象包含另一个数据对象的位置(左值),空指针为指针对象包含另一个数据对象的位置(左值),空指针为nil或或null。2、定长数据对象的创建操作、定长数据对象的创
55、建操作n创建操作分配一个存储块,并返回其左值,可用于存放对创建操作分配一个存储块,并返回其左值,可用于存放对象的右值。这种创建操作和声明创建方式有两个差别:象的右值。这种创建操作和声明创建方式有两个差别:na.数据对象不需要名字数据对象不需要名字nb.可在程序执行中任何位置创建可在程序执行中任何位置创建3、取引用操作、取引用操作n允许跟随指针到其指向的对象。允许跟随指针到其指向的对象。62指针数据类型:规约指针数据类型:规约n指针数据类型定义一类数据对象,它们的值是指针数据类型定义一类数据对象,它们的值是其它数据对象的位置。指针类型的对象有两种其它数据对象的位置。指针类型的对象有两种处理方式:
56、处理方式:1、指针只能引用单个类型的数据对象。、指针只能引用单个类型的数据对象。n如如C、PASCAL和和Ada等语言,需要进行指针类型声明和等语言,需要进行指针类型声明和相应的静态类型检查。相应的静态类型检查。2、指针可以引用任意类型的数据对象。、指针可以引用任意类型的数据对象。n如:如:SMALLTALK语言,数据对象本身带有描述子,需要语言,数据对象本身带有描述子,需要进行动态类型检查。也可以不进行类型检查。进行动态类型检查。也可以不进行类型检查。63指针数据类型:操作指针数据类型:操作n创建操作为一定长数据对象分配存储空间,创建操作为一定长数据对象分配存储空间,并创建指向该新数据对象的
57、指针,该指针可并创建指向该新数据对象的指针,该指针可以存放到指针数据对象中。如:以存放到指针数据对象中。如:PASCAL和和Ada中的中的new,C中的系统函数中的系统函数malloc。n选择操作允许跟踪指针值以达到指定的数据选择操作允许跟踪指针值以达到指定的数据对象。因为指针是普通的数据对象,指针数对象。因为指针是普通的数据对象,指针数据对象本身也可以用一般的选择机制。如:据对象本身也可以用一般的选择机制。如:*用于取指针的右值,并将其变成左值,用用于取指针的右值,并将其变成左值,用左值访问数据。左值访问数据。64指针数据类型:实现指针数据类型:实现n指针数据对象被表示为存储位置(包含指针数
58、据对象被表示为存储位置(包含另一个存储位置的地址,该地址是表示另一个存储位置的地址,该地址是表示该指针指向的数据对象的存储块的基地该指针指向的数据对象的存储块的基地址)。指针值的两种存储表示:址)。指针值的两种存储表示:1、绝对地址:指针值可以表示为数据对象所、绝对地址:指针值可以表示为数据对象所在存储块的实际存储地址。在存储块的实际存储地址。2、相对地址:指针值可以表示为从某基地址、相对地址:指针值可以表示为从某基地址开始的位移量。数据对象是被分配在一个大开始的位移量。数据对象是被分配在一个大的存储堆中。的存储堆中。65指针数据类型:实现指针数据类型:实现n当使用绝对地址时,由创建操作创建的
59、数据对象可以当使用绝对地址时,由创建操作创建的数据对象可以分配在存储区中的任意地方,通常,该分配发生在一分配在存储区中的任意地方,通常,该分配发生在一个存储堆区域中。使用绝对地址的选择操作将更为高个存储堆区域中。使用绝对地址的选择操作将更为高效,因为指针值提供了直接的访问。缺点是存储管理效,因为指针值提供了直接的访问。缺点是存储管理更为困难,因为数据对象不能随意在存储中移动,存更为困难,因为数据对象不能随意在存储中移动,存储的回收必须逐个进行。储的回收必须逐个进行。n使用相对地址需要一个存储块的初始分配,可以是每使用相对地址需要一个存储块的初始分配,可以是每种类型各有一个区域,也可以是所有数据
60、对象共有一种类型各有一个区域,也可以是所有数据对象共有一个区域。每个区域管理为一个堆。缺点是选择操作需个区域。每个区域管理为一个堆。缺点是选择操作需要更大的代价,优点是存储块可以整体任意移动,整要更大的代价,优点是存储块可以整体任意移动,整个区域可以处理为一个数据对象。个区域可以处理为一个数据对象。返回66文件和文件和I/On文件是一种数据结构,具有两个特殊性质:文件是一种数据结构,具有两个特殊性质:1、通常表示在外存上,比其它数据类型也要大得多。、通常表示在外存上,比其它数据类型也要大得多。2、生命期长,通常会跨越创建它的程序的生命期而、生命期长,通常会跨越创建它的程序的生命期而存在。存在。n顺序文
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年全国旅游合同示范文本
- 2025农业合作合同范本
- 2025年酸碱平衡调节药项目建议书
- 2025全面租赁合同示范文本
- 2025年家用美容、保健电器具项目建议书
- 2025年龙门式加工中心或龙门式卧式铣床项目合作计划书
- 2025年视窗防护屏项目合作计划书
- 2025年法律职业资格考试复习要点试题及答案
- 2025年环境污染防治专用设备合作协议书
- 广安画线施工方案
- 次氯酸钠溶液安全技术说明书MSDS
- 评标自动计算表(二次平均法)
- 学校食堂管理员岗位职责
- 江苏省淮安市2023年中考化学真题试题
- SMT员工,工艺培训资料
- JB-T 14226-2022 机械密封摩擦材料组合的极限pcv值试验方法
- GB/T 21923-2008固体生物质燃料检验通则
- GA 1205-2014灭火毯
- 第9课 两宋的政治和军事 说课课件(共19张PPT)- 人教统编版高中历史必修中外历史纲要上册
- 安徽生源化工有限公司100000吨年萘磺酸甲醛缩合物、3000吨年铸造用固化剂、2000吨年二苄胺、200吨年氯丙酰谷氨酰胺项目环境影响评价报告全本
- 湖北省高等学校教学成果奖推荐书、申请简表
评论
0/150
提交评论