收藏 分销(赏)

Delphi语法基础 DELPHI语法基础.doc

上传人:二*** 文档编号:4544911 上传时间:2024-09-27 格式:DOC 页数:30 大小:1.10MB
下载 相关 举报
Delphi语法基础 DELPHI语法基础.doc_第1页
第1页 / 共30页
本文档共30页,全文阅读请下载到手机保存,查看更方便
资源描述
第2章 Delphi语法基础 第2章 DELPHI语法基础 1 1、字符集 3 2、特殊符号 3 2.1保留字与标识符 3 2.1.1 保留字 3 2.1.2 标识符 3 1.标准标识符 3 2.自定义标识符 4 3.标识符的限定 4 2.1.3 指令符 4 2.2数据类型 5 2.2.1 数值型数据 6 1.整型 6 2. 实型 7 2.2.2 字符数据 7 1.字符型 7 2.字符串型 8 2.2.3 布尔型 8 2.3 常量与变量 9 2.3.1 常量 9 1. 直接常量 9 2. 符号常量 10 3. 类型常量 11 2.3.2 变量 11 1. 变量的声明 12 2. 变量使用 13 2.4 运算符与表达式 13 2.4.1 算术运算符与表达式 13 1. 算术运算符 13 2. 算术表达式 14 3、算术运算符的优先级 14 2.4.2 位运算符 14 2.4.3 字符串运算符 15 2.4.4 关系运算符 15 2.4.5 布尔运算符 16 2.4.6 运算符的优先顺序 17 2.4.7 求值方式 17 2.5 常用函数与过程 17 2.5.1 数学类函数 18 1绝对值函数定义: function Abs(X); 18 2平方与平方根函数 18 3 三角函数 18 4 整数部分与小数部分 19 5 取整函数 19 6 指数与对数函数 21 7随机函数 21 8π函数 22 2.5.2 字符处理函数 22 1 大小写转换函数 22 2 比较先后顺序函数 22 3 合并字符串 23 4 查找字符串函数 23 5 求字符串长度函数 23 6 截取子字符串函数 23 7删除子字符串过程 24 8插入子字符串过程 24 9数值和字符串相互转换 24 10 ASCII转换为字符 26 11 格式化函数 26 2.5.3 日期时间函数 27 1 日期与时间函数 27 2 日期函数 27 3 时间函数 27 4 转换函数 27 5 星期函数 27 6 日期与时间的格式 27 2.5.4 顺序类型函数 28 1. 顺序类型 28 2. 顺序函数 28 2.6 语句 28 2.6.1 语句的书写规则 28 2.6.2 语句格式中的符号约定 29 2.6.3 赋值语句 29 2.6.4 注释语句 29 1. 格式 29 2. 嵌套 30 3. 注释的原则 30 2.6.5 复合语句 30 Delphi 是一个基于Object Pascal语言的Windows应用程序开发系统,在所有的事件处理过程和应用程序中都是使用它来编写程序代码。Object Pascal编程语言是在Pascal 语言的基础上发展起来的,它继承了Pascal语法严谨、数据结构丰富等优点,同时融入了面向对象编程的语法要素,使之成为一种优秀的面向对象编程语言。 1、字符集 Object Pascal使用ASCII字符集,包括字母A到Z和a到z,数字0到9,以及其他的标准字符,编译器对大小写不敏感。 2、特殊符号  特殊符号是非字母非数字的字符或字符对,特殊符号有固定含义。下面的单个字符都是特殊符号:# $ & ' ( ) * + , ? . / : ; < = > @ [ ] ^ { } 下面的字符对也是特殊符号:(* (. *) .) .. // := <= >= < > 需要注意的是,!(叹号)、”(双引号)、%(百分比符号)、?(问号)、\(反斜杠)、_(下划线)、|(管道)以及~(代字号)不是特殊符号。 2.1保留字与标识符 首先介绍Object Pascal语言的最基本内容:保留字和标志符。 2.1.1 保留字 保留字(Reserved Words)是由系统规定的、具有特定意义的单词。在编程时不能被重新定义或另作他用。Object Pascal 语言规定的保留字有65个。说明: 除了上述的保留字外,Private、Protected、Public、Published 和Automated在定义对象类型时也作为保留字,而在其他场合则作为指令符。 单词at和on也具有特殊的含义。 注意:Object Pascal 编程语言和许多编程语言不同,它对单词的大小写是不敏感的。Object Pascal不区分大小写。IN、in和In都被看做是同样的意义。 2.1.2 标识符 标识符是一种符号,标识符用来表示常量、变量、字段、类型、过程、函数、程序、单元、库、包和记录中的域等。 标识符分为标准标识符和自定义标识符两类。 1.标准标识符 标准标识符是Object Pascal语言系统预先分配给标准常量、标准类型、标准函数、标准过程及标准文件使用的标识符。如: l 标准常量:例如Boolean类型数据的取值True和False。 l 标准类型:例如Boolean,char,text等。 l 标准过程:例如Put、Reset等。 l 标准函数:例如sin(正弦函数)、Cos(余弦)等。 l 标准文件:例如Input、TextFile等。 2.自定义标识符 自定义标识符是程序员根据需要为自己定义的常量、变量、类型、函数、过程以及所编写的程序名等。Object Pascal标识符的命名规则: (1)必须以字母或下划线开始,在标识符的第一个字符之后,字母、数字、下划线都是允许的。 (2)标识符的长度可以是任意的,但只有前255个字符是有意义的。 (3)不能与保留字相同;避免与Object Pascal已经使用的标准标识符相同。 (4)必须先定义或说明,才能被使用。 (5) Object Pascal语言对字符大小写是不敏感的。例如,标识符CalculateValue可以被写成以下几种方式: CalculateValue calculateValue calculatevalue CALCULATEVALUE (6)标识符的命名要尽量采用有意义的符号(例如英文单词),既便于记忆,也增加程序的可读性。 例如:_abc xyz an4 都是合法的 4an and abs x+y ‘hello’ hi! 都是不合法的 3.标识符的限定 当使用的标识符在多于一个单元中都有声明时,有时有必要限制标识符。限制标识符的语法如下: identifier1.identifier2 这里的identifier1限制了identifier2。例如,如果两个单元中都声明了名为CurrentValue的变量,那么可以通过对标识符进行限制来指定访问Unit2中的CurrentValue,写成 Unit2.CurrentValue 此外,Object Pascal允许迭代限制。例如语句: Form1.Button1.Click 调用了Form1中Button1的Click方法。 如果不对标识符进行限制,那么编译器将根据作用域规则确定对该标识符的解释。 2.1.3 指令符 指令符(directives)也是具有特殊意义的单词,对源代码中的特殊位置是敏感的。在Object Pascal中,指令符具有特殊意义,但与保留字不同的是,指令符仅出现在用户定义的标识符不能出现的上下文(范围)中。因此,可以定义与指令符正好一样的标识符,尽管这样做是不妥当的(从代码易读的角度来说,容易产生混淆和歧义,尽管编译器能够正确区分)。 下面的例子说明了指令符与保留字的区别。 procedure ProcMyMsg(var message:TMessage); message WM_USER + 100; 在上面的代码中,出现的两个message具有不同含义。 前者作为ProcMyMsg过程的参数,是一个标识符;可以用任何有效的标识符来替换(这样就不至于产生歧义),但不能用保留字来替换 后者作为指令符,含义是把过程ProcMyMsg作为消息处理程序,与消息WM_USER + 100联系在一起。无法用其他标识符或保留字来替换。 下面的写法将不被编译器认可: procedure ProcMyMsg(var for: TMessage); message WM_USER + 100; 保留字不能作为标识符,也尽可能不要定义与指令符同名的标识符。 2.2数据类型 描述客观事物的数、字符以及所有能输入到计算机中并被计算机程序加工处理的符号的集合称为数据。数据的一个重要特征就是其所属的数据类型,数据类型不仅确定了该类数据的表示形式和取值范围,而且还确定了数据所能够参加的各种运算。 Object Pascal提供了多种数据类型,包括标准数据类型和高级数据类型。 l 标准数据类型属于Object Pascal内部约定的数据类型,无需定义就可以直接使用。标准数据类型有整型(Integer)、实型(Real)、字符型(Character)、字符串型(String)、布尔型(Boolean)五种。 l 高级数据类型体现了特殊的数据结构,在使用之前必须由用户自己进行定义。高级数据类型有枚举型(Enumerated)、子界型(Subrange)、集合类型(Set)、数组类型(Array)、记录类型(Record)文件类型(File)、类类型(Class)、类引用类型(Class Reference)、接口类型(Interface)、指针类型(Pointer)、过程类型(Procedural)、可变类型(Variant)。此外,类型标识符自身可以被视为属于某个特定类型,因为他们可以被作为参数传递到某些函数中(如High、Low、SizeOf等)。 l 其中的整型、字符型、布尔型、枚举型和子界型为顺序类型。其取值为有序的集合,每个可能的取值都与顺序有关。 l 类型可以分为基本(fundmental)类型和一般(generic)类型。不管基于何种CPU和操作系统,基本类型的范围和格式在Object Pascal的所有执行中都是相同的。一般类型的范围和格式根据平台的不同而有所区别,并且在不同的执行中也有变化。大部分预定义类型是基本类型,但一小部分的整数、字符、串和指针类型是一般类型。尽可能地使用一般类型是个好主意,因为他们提供了最佳的性能和可移植性。 2.2.1 数值型数据 数值型数据分为两类十三种 1.整型 整数包括正整数、负整数和零。整型是存储整数数据的类型。Object Pascal包括9种形式的整型数据。 一般的整数类型是Integer和Cardinal,需要时,应当尽可能地使用这两种类型,因为它们在各种CPU和操作系统中都提供最佳的性能。下面是32位Object Pascal编译器中这两种整数类型的范围和存储格式:  类型 范围 格式 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 含符号的64位 Byte 0.255 无符号的8位 Word 0.65535 无符号的16位 Longword 0..4294967295 无符号的32位 通常,作用于整数的算术运算符返回Integer类型的值,在当前执行中,等价于32位的长整型(LongInt)。仅当对Int64类型执行运算时,运算结果返回Int64类型。 2. 实型 实型是存储实数数据的类型。实数类型定义了可以用浮点符号表示的数的集合。 Object Pascal包括5种形式的实型数据。 下表给出了基本实数类型的范围和存储格式:  类型 范围 精度 占字节数 Single ±1.5 x 10^-35 .. 3.4 x 10^38 7~8 4 Double ±5.0 x 10^-324 .. 1.7 x 10^308 15~16 8 Extended ±3.6 x 10^-4951 .. 1.1 x 10^4932 19~20 10 Currency -922337203685477.5808.. 922337203685477.5807 19~20 8  一般类型Real,在当前Object Pascal实现中等价于Double。  类型 范围 精度 占字节数 Real ±5.0 x 10^-324 .. 1.7 x 10^308 15~16 8 目前多数系统都按照IEEE-754标准来规定浮点数的存储格式。IEEE754规定:实数分为三个部分:符号位、阶码和尾数。阶码即指数,尾数即有效小数位数。 l 单精度浮点数用4字节存储,单精度格式阶码占8位,尾数占23位,符号位1位, l 双精度浮点数用8字节存储,双精度则为11位阶码,52位尾数和1位符号位。 下列注释适用于基本实数类型: Extended比其它实数类型提供了更高的精度,但同时也占用较多的空间。当要创建跨平台共享是数据文件时,应谨慎使用该类型。 Curreny是定点数据类型,该类型在货币计算时使舍入误差最小。Currency类型以含格式的64位整数存储,其中隐含地包括了表示小数部分的4位最少有效数字。在赋值语句和表达式中将该类型与其他实数类型混合时,Currency类型的值会自动被除以或乘以10000。(大多数货币数字都只含有2位小数,Currency类型总是保留4位小数,这就足以使货币计算的误差降到最小。)该类型与其他实型进行运算,Delphi自动将结果转化为Currency类型。 2.2.2 字符数据 1.字符型 字符型是存储单个字符的类型。Object Pascal包括3种形式的字符型数据。 基本字符类型是AnsiChar和WideChar。 AnsiChar的尺寸是一个字节(8位)。 WideChar的尺寸是一个字(16位),其字符顺序参照Unicode字符集,Unicode字符集中的前256个字符对应ANSI字符。 最常用的字符类型,一般字符类型Char,等价于AnsiChar。 字符类型数据的表示方法是用两个单引号括起单个字符如:'A'、'6'、' . '。'' 表示空字符。 2.字符串型 字符串型是存储字符串数据的类型。Object Pascal包括4种形式的字符串型数据。 类型 最大长度 占用内存 用于 ShortString 255个字符 2到256字节 向后兼容 AnsiString 大约2^31个字符 4字节到2GB 8位(ANSI)字符 WideString 大约2^30个字符 4字节到2GB 多用户服务和多语言应用程序 String 大约2^31个字符 4字节到2GB 8位字符 保留字string的作用 一般类型的标识符。例如: var S: string; //创建了变量S,用于保存字符串。 在默认的编译指示{$H+}状态下,编译器将string(后面没有跟随方括号和数字)解释为AnsiString;使用编译指示{$H-}时,解释为ShortString。 ShortString类型串的长度在0到255之间。ShortString串的长度可以动态改变,其占用的内存是静态的,总是256字节;第一个字节存储串的长度,其余255个字节存储串中的字符。 AnsiString也叫做长串(long string),用来表示动态分配的串。 WideString类型表示16位Unicode字符的动态分配的串。WideString类型大部分的特性与AnsiString类型相似。 Object Pascal还支持其他最大长度在0到255之间的短串。可以通过在保留字string后边附加方括号括起来的数字来表示。例如: var MyString: string[100]; 2.2.3 布尔型 布尔型数据用于进行逻辑运算,布尔型数据的值只有两个:True(真)和False(假)。 Object Pascal中提供了4个预定义布尔类型:Boolean、ByteBool、WordBool、LongBool。其中,Boolean是首选类型,其他布尔类型是为了向其他语言和操作系统提供兼容。 Boolean变量占用一个字节的内存,ByteBool变量也占用一个字节,WordBool变量占用两个字节(一个字),LongBool变量占用四个字节(双字)。 下面是各种布尔类型中值的关系: 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、LongBool、WordBool类型,当值的序号非零时,值被认为是True。如果这样的一个值出现在需要Boolean类型的上下文中,编译器将自动将所有序号非零的值转换成True。 上面的说明是指布尔值的序号而不是指布尔值。在Object Pascal中,布尔表达式不能被等同为整数或实数。因此,如果 X 是一个整数类型的变量,那么语句 if X then ...; 将产生一个编译错误。转换变量到布尔类型是不可靠的,可以通过下面的语句来达到相同的目的: if X <> 0 then ...; { 使用长的表达式返回布尔值 } var OK: Boolean { 使用布尔变量 } ... if X <> 0 then OK := True; if OK then ...; 2.3 常量与变量 在程序设计中常用到两种形式的数据,一种是在程序执行过程中其值保持不变的数据,称为常量;另一种是在程序执行过程中其值可以改变的数据,称为变量。 2.3.1 常量 常量是一种在程序执行进程中其值保持不变的数据。 根据使用的方式不同,程序中的常量分为直接常量、符号常量与类型常量。 1. 直接常量 直接常量是指在程序中直接引用的整数、实数、字符、字符串或其他不同类型的常数。下列常数均属于直接常量。 (1)整型常量 l 可以十进制的阿拉伯数字序列来表示,序列中不能含有逗号、空格等分节符。 例如:12 34 合法 123,444,567,000 不合法 l 前缀正号(+)或负号(-),用于表示数字的符号。例如,67258 等价于 +67258 -1234 l 美圆符号前缀表示16进制数字,例如 $8F 。 l 注意:赋值时,如果16进制数值在被赋值类型范围之外,那么将引发异常。而如果是向32位的Integer类型赋值,数值超出范围时只提出警告而不引发异常。这种情况下,超出Integer类型正数范围的数值将作为负数被接受(一致习惯用2进制补码表示)。 (2)实数常量 包括定点实数与浮点实数两种表示形式。 l 可以含有小数点的十进制的阿拉伯数字序列来表示,序列中不能含有逗号、空格等分节符,小数表示法中小数点前后都必须有数字。 例如:123444567.000 合法 123,444,567.000 不合法 0.25 合法 .25 不合法 l 前缀正号(+)或负号(-),用于表示实数的符号 l 实数也可以科学计数法表示。当字符 E 或 e 出现在实数中时,意味着是乘以10的幂,中e前后都必须有数字,e可以大写成E,指数必须是整数。 例如:7E-2表示的是7 * 10^-2(7乘以10的 -2次幂),12.45e+6 和12.45e6都表示 12.45 * 10^6。 (3)字符型常量 l 字符类型数据的表示方法是用两个单引号括起单个字符如:'A'、'6'、' . '、'' 表示空字符。 ??如何表示字符 ’ ‘I’’m a student.’ (因为’是一个特殊符号,必须用两个重复的符号来表示,''''可以表示一个'的字符。) l 控制字符都由 # 号及紧随其后的无符号整型常量(0..255之间,10进制或16进制)组成并且表示相应的ASCII字符。 ?? #65 #97 #13 (4)字符串常量,由单撇号括起来的字符串,如:'hello','abc123','3.234'。 l 引用串 ,由单撇号括起来的字符串,如: 'BORLAND' {BORLAND} 'You''ll see' {You'll see} '''' {'} '' {空串} ' '{空格} l 控制串是由一个或更多控制字符的序列,每个控制字符都由 # 号及紧随其后的无符号整型常量(0..255之间,10进制或16进制)组成并且表示相应的ASCII字符。 #89#111#117 等价于引用串 'You' l 联合引用串与控制串以构成大的字符串。 'Line 1'#13#10'Line 2' l 两个引用串不能通过这种方法连接。 ‘Hello’’World’ {Hello’World} (5)布尔型常数,只有两个值True和False。 2. 符号常量 符号常量是指一个被声明的标识符,它的值不能改变。 如果在一个程序中,某一个常数反复多次出现,可以定义一个标识符来代表该常数。定义常量时使用常量说明语句,语法格式为: const <常量名1>=<常量值1> … <常量名n>=<常量值n> 其中const是Object Pascal的保留字,表示常量定义的开始。<常量名>即常量的标识符,<常量值>是直接常量或常量组成的表达式。例如: const p=3.1415926; K=p/180; 不能在程序中给常量另行赋值,否则会导致语法错误。 3. 类型常量 类型常量不同于符号常量,它能保存数组、记录等高级数据类型的值。 定义类型常量的语法格式如下: const <常量名>:<类型名>=<常量值>; 例如: const Hello: string = 'Hello'; Max: Integer = 100; Digits: array[0..9] of Char = ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9'); //定义了一个常量来保存数组 在缺省的编译状态 {$J-} 中,类型常量不能被赋予新的值,这时的类型常量相当于只读变量。然而,如果编译指示 {$J+} 有效,那么类型常量可以被赋予新的值,这时的类型常量相当于被初始化过的变量。 编译指令的修改project|Options|Compiler|Assignable Typed Constants 2.3.2 变量 变量是程序代码中代表一个内存地址的标识符,而此地址的内存内容在程序代码执行时可以被改变。在使用变量前必须对它进行说明,即对它进行命名,并说明它的类型。变量就像数据容器,而且由于变量被定义了类型,只能用于储存与其定义类型相兼容的数据。 变量有如下三个主要特征。 (1)变量名:即变量的标识符,用于对所代表的内存单元的引用。 (2)类型:变量的类型决定了变量中所存放数据的范围、有效的操作、存储空间的大小和格式。 (3)变量值:变量所代表的内存单元中的数据值。 注意:变量必须先声明才能使用。 1. 变量的声明 变量在单元、函数或过程的声明部分进行声明,声明位置决定了变量的作用范围。 unit Unit1; interface implementation {$R *.dfm} function… begin … End; … V1 V2 V3 V1,V2都是全局变量,v3是局部变量。 变量声明的格式为: var <变量名1>:<类型名1>; … <变量名n>:<类型名n>; 声明多个同类型的变量时可采用如下格式: var <变量名1> … <变量名n>:<类型名>; 其中var是Object Pascal的保留字,表示变量定义的开始,<变量名>可以是任意合法的标识符,<类型名>可以是Object Pascal的基本数据类型也可以是由用户定义的高级数据类型。 声明在过程或函数内部的变量有时叫做局部变量,而在应用程序开始声明的变量叫做全局变量。全局变量可以在声明时对它进行初始化,格式为: var <变量名>:<类型名>=<常量表达式> 其中常量表达式的值必须与变量定义的类型相兼容。 例如: var I: Integer; //声明了一个类型为Integer的变量I,类似地 X, Y: Real; //声明了类型为Real的两个变量X和Y。 var X, Y, Z: Double; I, J, K: Integer; Digit: 0..9; //子界类型 Okay: Boolean; 2. 变量使用 变量经过声明之后,就可以在程序中使用了,通常可以通过赋值语句给变量赋值。 如果没有明确初始化全局变量,那么编译器将对其初始化为0。不同的是,局部变量不能在其声明中被初始化,并且在其被赋值之前包含的是随机数据。一旦声明了一个变量,应及时对它赋值进行初始化,未经初始化的变量的值是一个不确定的随机数,如果该变量参与运算或是出现程序流程中将会产生意想不到的后果。初始化变量的最简单方法就是给变量赋值。 例如: X:=6.5; I:=9; Y:=15; 2.4 运算符与表达式 运算是对数据进行加工处理的过程,描述各种不同运算的符号称为运算符,而参与运算的数据称为操作数。表达式是表示某个求值规则的运算公式,它由运算符和圆括号将常量、变量等操作数以合理的形式组合而成。表达式可以用来执行运算、操作或测试数据,每个表达式都会产生惟一的值。表达式的类型由运算符的类型决定。在Object Pascal 中有以下几种运算符:算术运算符、位运算符、字符串运算符、关系运算符、布尔运算符、集合运算符、指针运算符、类运算符和@运算符。本章中先介绍几种常用的运算符。 2.4.1 算术运算符与表达式 1. 算术运算符 Object Pascal有8个算术运算符,在这8个算术运算符中,除取正“+”、取负“-”是单目运算符外,其他均为双目运算符,详见本教程P36页表2-9。 运算符 操作 优先级 范例 +(一元) 符号等同 1 +7 -(一元) 符号相反 1 -X + 加 3 X + Y - 减 3 Result - 1 * 乘 2 P * InterestRate / 实数除 2 X / 2 Div 整数除 2 Total div UnitSize Mod 取模 2 Y mod 6 l 其中+、-、*运算的含义与数学中的相同,参加运算的数可以是整型也可以是实型,结果由Delphi自动向精度高的数据类型转化。 l 参加除法运算“/”的数无论是整型或是实型,结果都是实型。 l 参加整数除法“div”和求余运算“mod”的数必须是整型,结果也是整型,分别是除法的商和余数。余数符号与被除数相同。 l 在表达式a/b 、a div b 、a mod b 中,如果b的值为0将会触发一个错误。 例如:10 mod 3的值为1,10 div 3的值为3。 2. 算术表达式 算术表达式是由算术运算符、数值型常量、变量、圆括号组成,其运算结果为一数值。 例如:3*4+(90-5)/4*2的值为54.5。 在书写算术表达式时应当注意以下两点: l 在数学中可以省略乘号,但在算术表达式书写中不可以省略,如在数学中相乘可以写成2x,但在编程中必须写成2*x; l 所有括号都用小括号(),括号必须配对,例如数学式3[x+(y-z)]在编程中必须写成3*(x+2*(y-z))。 l 对于整型表达式,如果其中一个操作数是Int64类型,其运算结果是Int64类型;否则运算结果是Integer类型。如果一个操作数的类型是整数类型的子界,那么它将被视为整数类型。参加整数除法“div”和求余运算“mod”的数必须是整型,结果也是整型,分别是除法的商和余数。对于表达式x div y、x mod y,当 y 为零时将发生运行时错误。 例如:10 mod 3的值为1,10 div 3的值为3。 l 实数参与的运算几乎都是近似运算。 l 表达式 x/y 的值始终是Extended类型,而不管 x 和 y 是何类型。对于其他算术运算符,只要至少其中一个操作数是实数,其运算结果就是Extended类型。 l 表达式x/y,当 y 为零时将发生运行时错误。 l 其中+、-、*运算的含义与数学中的相同,参加运算的数可以是整型也可以是实型,结果由Delphi自动向精度高的数据类型转化。 3、算术运算符的优先级 2.4.2 位运算符 位运算符是指对操作数进行的按位逻辑运算。其运算对象是整数,运算结果也是整数,Object Pascal有6 个位运算符。 l x shl y和x shr y实现的运算是将x的值向左或向右移动y位(bit),相当于x乘以或除以2的y次幂,运算结果的类型与x相同。 例如:N(01101)(十进制为13),N shl 1 (11010)(十进制为26)。?? N shr 1的结果是多少? l not x,x shl y,x shr y类型与x的类型相同 l x and y,x or y,x xor y类型为x与y的类型中值的范围小的类型。 l and、or、not和xor运算符当运算符两侧为数值数据,则将数值数据转换为二进制数(补码形式)进行按位运算。 运算符 操作 操作数类型 结果类型 范例 Not 按位否定 整数 整数 not X And 按位与 整数 整数 X and Y Or 按位或 整数 整数 X or Y Xor 按位异或 整数 整数 X xor Y Shl 按位左移 整数 整数 X shl 2 Shr 按位右移 整数 整数 Y shr I 设x值为3,y值为5,在内存中按二进制保存,即x,y值分别为00000011,00000101。按位计算结果如下: not x 的值为 11111100 (十进制数 –4) x and y 的值为 00000001 (十进制数 1) x or y 的值为 00000111 (十进制数 7) x xor y 的值为 00000110 (十进制数 6) x shl y 的值为 01100000 (十进制数 96) x shr y 的值为 00000000 (十进制数 0) 2.4.3 字符串运算符 Object Pascal只有一种字符串运算符,即连接运算符“+”。该运算符用于连接两个或更多的字符串。 当两个字符串用连接运算符连接起来后,第二个字符串直接添加到第一个字符串的尾部,结果是一个更长的包含两个字符串的全部内容的字符串,也可以把多个字符串连接起来,每两个字符串之间都要用“+”号分隔。例如: 'abcdef'+'123' 连接后结果为:'abcdef123' 'abc'+'123'+'xyz' 连接后结果为:'abc123xyz‘ l (+)运算符的操作数可以是串、压缩串(Char类型的压缩数组)或字符。然而,如果其中一个操作数是WideChar类型,那么另一个操作数必需是一个长串。 l (+)运算符对串运算的结果类型与任意串类型兼容。然而,如果操作数都是短串或字符,而它们连接后的长度大于255,那么运算结果将只保留前255个字符,将多余的部分截去。 l 加号(+)运算符对串的操作与其对数字的操作有很大差异。对于数字a、b,表达式a + b与b + a是等价的,对于字符串s1、s2表达式s1 + s2与s2 + s1不是等价的。例如,当s1为'hello'、s2为'world'时,s1 + s2返回的值是'helloworld',而s2 + s1返回的值是'worldhello'。也就是说,当加号(+)作为字符串运算符时,操作数的位置顺序直接影响运算结果。 l 对串进行索引,如果S是一个串变量,i是一个整数表达式,那么S[i]表示串S中第 i 个字符或者直接地说是S中的第i个字节。 n 对ShortString或AnsiString,S[i]是AnsiChar类型; n 对WideString,S[i]是WideChar类型。 例如:语句 MyString[2] := ‘A’; 把值 A 赋给MyString的第二个字符。 2.4.4 关系运算符 关系运算符用于比较两个操作数。关系运算符 =、<>、<=、>= 也适用于集合;= 和 <> 也适用于指针(见指针运算符)。 运算符 操作 操作数类型 结果 范例 = 相等 简单类型、类、类引用、接口、串、压缩串 Boolean I = Max <> 不等 简单类型、类、类引用、接口、串、压缩串 X <> Y < 小于 简单类型、串、压缩串、PChar X < Y > 大于 简单类型、串、压缩串、PChar Len > 0 <= 小于或等于 简单类型、串、压缩串、PChar Cnt <= 1 >= 大于或等于 简单类型、串、压缩串、PChar I >= 1 用关系运算符把两个运算对象连接起来表示它们大小关系的式子称为关系表达式。 关系运算符的运算规则: l 除实数和整数可以比较之外,用于比较的操作数必须类型兼容。 串的比较依照扩展ASCII字符集的顺序;字符类型被视为长度为1的串。串的比较由定义为串中相应位置字符顺序比较。 l 对于整型数据,比较是直接进行的。例如,当I和J具有相同的值是,I = J为True,否则I <> J为True。 关系表达式的一般格式及其功能如下。 [格式]:表达式1 关系运算符 表
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服