数据类型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
数据类型
数据类型2010-06-30 10:22类型在本质上是一种数据的名称。当声明一
个变量时,必须指定它的类型;类型决定了它的取值范围和可以进行的操作(运算)。每个表达式返回一个特定类型的值,函数也是如此;大多数函数和过程要求指定类型的参数。Object Pascal是一种'强类型'语言,也就是说,它对各
种数据类型加以区分,并且不总是允许你用一种数据类型替代另一种。这通常
是有好处的,因为它使编译器能聪明地处理数据并且更深入地验证你地代码,
可以避免产生难于调试的运行时错误。但当你需要更多灵活性的时候,也有办
法可以绕过强类型限制,它们包括强制类型转换(typecasting)、指针、变体类型(Variant)、记录中的变体部分(Variant parts in records)和绝对地址变量。数据类型就是你把一个二进制数值以什么类型的格式读取和使用常用的类型可
分为:简单类型Integer types(整数类型)整数类型表示所有数字的一个子集。一般(generic)整数类型是Integer和Cardinal,只要可能就尽量使用它们,
因为它们对依赖的CPU和操作系统作了优化。下表给出了32位编译器下它们的取值范围和存储格式:类型取值范围格式Integer-2147483648.2147483647 32
位有符号Cardinal 0.4294967295 32位无符号基本整数类型包括Shortint、Smallint、Longint、Int64、Byte、Word和Longword。类型取值范围格式Shortint-128.127 8位有符号Smallint-32768.32767 16位有符号Longint-2147483648.2147483647 32位有符号Int64-2^63.2^63-1 64位有符号Byte
0.255 8位无符号Word 0.65535 16位无符号Longword 0.4294967295 32位无
符号通常,对整数类型进行(算术)运算返回一个Integer类型(当前相当于32
位的Longint)。只有当对一个Int64类型的整数运算时才返回Int64类型Character types(字符类型)基本字符类型是AnsiChar和WideChar。AnsiChar
是8位字符集,它们将依照本地字符集的顺序排列,这可能是多字节的。AnsiChar原先是根据ANSI字符集建立的,但现在扩展为可以指定本地字符集。WideChar使用多于一个字节来表示每个字符。在当前实现中,WideChar依据Unicode字符集(要意识到它的实现将来可能会改变),使用一个字的宽度(16-bit)来存储字符。开头的256个Unicode字符对应于ANSI字符。一般字符类型是Char,它相当于AnsiChar。因为Char的实现可能被迫改变,所以,在需要
处理不同大小的字符时,应该使用SizeOf而不要使用硬编码常数,这通常是个
好主意。一个长度为1的字符串常量,比如'A',可以表示一个字符。内置函数Chr,返回一个在AnsiChar或WideChar取值范围内任意一个整数的字符值。比如,Chr(65)返回字母A。字符和整数一样,当因为增加或减少而超过它的取值
范围的开头或尾部时,它的值将回转(除非开启了边界检查)Boolean types(布
尔类型)4种内置的布尔类型为Boolean、ByteBool、WordBool和LongBool,Boolean是首选的,另外三种是为了和其它语言以及操作系统库相兼容。一个Boolean类型的变量占据一个字节,ByteBool也是,WordBool类型占据两个字
节(1 word),LongBool占据4个字节(2 words)。Boolean值由内置的常数
True和False来表示。Boolean ByteBool,WordBool,LongBool False True False True Ord(False)=0 Ord(False)=0 Ord(True)=1 Ord(True)0
Succ(False)=True Succ(False)=True Pred(True)=False Pred(False)=True
对ByteBool、WordBool和LongBool来说,若它的序数不为0,它就被认为是True。在一个需要Boolean类型的环境种,编译器自动把非0值转换为True。Enumerated types(枚举类型)枚举类型定义一个有次序的值的集合:这些值用
标志符表示,并被列举出来,但它们并没有内在的含义。定义一个枚举类型,
使用下面的语法:type typeName=(val1,.,valn)这里,typeName和每个值是
有效的标志符。例如,下面的声明type Suit=(Club,Diamond,Heart,Spade);
定义了一个叫做Suit的枚举类型,它的可能值包括Club、Diamond、Heart和Spade。这里,Ord(Club)返回0,Ord(Diamond)返回1,依此类推。当定义一个枚举类型时,也就同时定义了它的每一个值:它是类型typeName的一个常量。如果在同一个范围内你使用val标志符用作其它目的,将产生命名冲突Real types(实数类型)实数类型定义了一类可以用浮点表示的数字。下表给出了基本实数类型的范围和存储格式:类型范围有效位数字节大小Real48 2.9 x10^-
39.1.7 x10^38 11-12 6Single 1.5 x10^-45.3.4 x10^38 7-8 4Double 5.0
x10^-324.1.7 x10^308 15-16 8Extended 3.6 x10^-4951.1.1 x10^4932 19-20 10 Comp-2^63+1.2^63-1 19-20 8Currency-
922337203685477.5808.922337203685477.5807 19-20 8一般实数类型为Real,在当前实现中,它相当于Double。注意:在Object Pascal的早期版本中,Real相当于6字节的Real48,若要重新编译以前的代码,你可能要把它改为Real48;你也可以使用{$REALCOMPATIBILITY ON}编译器指示字把Real类型转
回到原先类型。以下备注适用于基本实数类型:保留Real48是为了向后兼容性。因为它的存储格式在Intel CPU下不能优化,这将导致比其它浮点类型运行稍