Delphi的编程语言Object Pascal(3)

1. Object Pascal数据类型

l          数据类型描述了变量和常量的使用情况

l          Object Pascal是一种强类型的语言,它可以区分不同的数据类型,而不能随便用一种数据类型代替另一种数据类型。

l          在使用变量和常量时,必须要先对变量或常量进行声明。

l          优点:有利于编译器合法有效的处理数据,不会出现硬件错误。当类型不满足要求时,还可以自定义所需要的数据类型。

 

1.1  有序数据类型

l          有序数据类型:1、整数类型,2、字符类型,3、布尔类型,4、枚举类型,5、子界类型。

l          任何一个有序类型的数据都有唯一的一个先行数(第一个除外),和唯一的一个后继数(最后一个除外)。

 

常用函数

函数

参数

返回值

备注

Ord

有序类型表达式

有序类型表达式的序号

不能处理64,Int64

Pred

有序类型表达式

表达式前驱的值

在有写过程时不可用

Succ

有序类型表达式

表达式后继的值

在有写过程时不可用

High

有序类型表达式

该类型的最大值

同样适合于短字符串和数组类型

Low

有序类型表达式

该类型的最小值

同样适合于短字符串和数组类型

l          Inc()函数

    inc(i)等价于Succ(i)

    i为整数时,i:=i+1

 

l          Dec()函数

    Dec(i)等价与Pred(i)

    i为整数是,i:=i-1

1.1.1           整数类型

              整型是存储整数数据的类型。是全体带符号整数的统称。

              整数类型分为:通用整数类型,和基本整数类型。

通用类型

类型

名称

字节数

取值范围

整型

Integer

有符号32

-2 147 483 648~2 147 483 647

序数型

Cardinal

无符号32

0~4 294 967 295

基本整数类型

类型

名称

字节数

取值范围

短整型

Shortint

有符号8

-128~127

小整型

Smallint

有符号16

-32 768~32 767

长整型

Longint

有符号32

-2 147 483 648~2 147 483 647

64位整型

Int64

有符号64

-263~263-1

字节型

Byte

无符号8

0~255

字型

Word

无符号16

0~65535

 

不同数据类型,其存储能力截然不同,因此,我们尽量推荐使用通用类型:Integer,Cardinal。这两种类型可以最大限度的发挥CPU和操作系统的性能。

                           

1.1.2           字符类型

l          字符类型只能存储一个字符

类型

名称

字节数

取值范围

字符型

Char

1(2)字节

存储一个ANSI字符,通用类型。

Ansi字符型

AnsiChar

1字节

存储一个ANSI字符,基本类型。

宽字符型

WideChar

2字节

存储一个Unicode字符,基本类型。

l          ANSI字符集是扩展的ASCII字符集,每个字符占一个字节。

l          WideChar用来支持Unicode。每个Unicode字符占用2个字节。有65536种取值。可以表达世界上的所有语言。

l          每个字符都对应一个有序整数,其值是对应的ASCII字符的位置

l          Chr()函数或#符号

   该函数返回ASCII中某序数所代表的字符,与Ord()函数互为逆函数。

       eg:   MyChar:=chr(65)   //返回A

             Mychar:=#65        //返回A

l          UpCase()函数

   该函数将小写字母转换为大写字母,

   eg:  UpCase(a)   //返回A

        UpCase(A)  //返回A

1.1.3   布尔类型

用于逻辑运算

类型

名称

字节数

取值

布尔型

Boolean

1

只能为0(False)1(True)

字节布尔型

ByteBool

1

0(False)或非0(True)

宽布尔型

WideBool

2

0(False)或非0(True)

长布尔型

LongBool

4

0(False)或非0(True)

l          Boolean是通用类型。推荐使用Boolean。它占用最少的内存空间。

l          3种基本类型:ByteBool,WideBool,Longbool,是为了兼容其他语言而设置的。当表达式的值为0时,则可认为表达式的值是False,而当表达式的值为非0时,则可认为表达式的值是True

 

有序数据类型函数计算

函数

返回值

Ord(False)

0

Ord(True)

1

Succ(False)

True

Pred(True)

False

High(True)

True

Low(True)

False

1.1.4   枚举类型

l          枚举类型是通过枚举的方式将该种类型的所有取值用标识符一一列举出来。

l          定义的一般格式:

Type 

TypeName=(val1,val2,…,valn);

……

Var

VariableName:TypeName;

……

l          Type:类型说明标识符。TypeName是枚举类型名称。Val是自定义的枚举常量,是一组标记符号,标记符号数目不能超过255个。

l          两点注意规则:

   1、每个枚举常量必须是标识符,不能是其他数据类型。

   2、在枚举定义语句中,一个枚举常量只能出现一次。

eg:

Type

     weeks=(Sunday,Monday,Tuesday,

           Wednesday,Thurday,Friday,Saturday);

Var

w:weeks;

l          枚举类型是使用整数值来储存的。枚举类型的每一个值对应一个整数值。

l          默认情况下,每个值都会根据定义的顺序(0开始),向右依次增加1Eg:

   w:=Wednesday;

   ord(w)将返回值3

   w:=Sunday;

   ord(w)将返回值0

l          通过=运算符重写赋值过程,自定义每个枚举的实际值。   eg:

l          Type

weeks=(Sunday=1,Monday=2,Tuesday=4,Wednesday,Friday,Thurday,Saturday=Sunday+Tuesday);

l          若枚举项未被赋值,则未被赋值的枚举项会自动获得一个初始值。最后一个明确赋值的枚举项的序列值上加1

l          问题:多个枚举项的序数值相同。

l          枚举常量不能参与运算,必须通过枚举变量进行运算。Eg:

   w:=Monday;   //正确的操作

   Sunday+Monday;   //错误的操作

l          枚举类型的常用Case间接的输出。Eg

   Case number of

      0:showmessage(‘Sunday’);

      1:showmessage(‘Monday’);

      2:showmessage(‘Tuesday’);

   End;

1.1.5   子界类型

l          子界类型是由1、整型  2、字符型  3、枚举型  4、布尔型中的某两个常量指定的该类型的值域区间。

l          定义的一般类型:

   Type

       TypeName=ConstLow . . ConstHigh;

   Var

       VirableName:TypeName;

l          Type:类型说明标识符。TypeName是子界变量名称。ConstLow是下界常量,ConstHigh是上界常量,

l          几点注意规则:

   1、子界类型的上、下界常量必修是同一重类型,并且是有序类型。

   2、子界类型的上、下界必修依次有序递增。

   3、子界类型变量具有基类型数据的所有运算特性,但运算结果必须在所定义的上下界范围内。

   4、一个子界类型继承它的常量类型的运算符和标准函数。

   5、常量类型相容的不同子界类型可以混合运算。

l          子界类型与其基类型之间,以及同一基类型的不同子界之间可以混合运算。

l          子界类型赋值时,应该保证右端表达式的值不超过左端变量所允许的范围。

l          参加运算的各量应满足类型相容性,赋值时,应满足赋值相容性。

 

 

附: 练习题

1、创建一个delphi应用程序,在窗体中加入一个button1、一个edit1和一个edit2;在程序中声明一个weeks的枚举类型,类型中包括一个星期的七天,例如:

weeks=(Sunday,Monday,Tuesday,Wednesday,Thurday,Friday,Saturday)  

声明一个weeks的变量w

并把这个变量w的值显示在edit1中,

edit2中显示w的序号值。

Type

  weeks = (Sunday,Monday,Tuesday,Wednesday,Thurday,Friday,Saturday);

var

  w:weeks;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

 w := Monday;

 self.Edit1.Text := 'Monday';

 self.Edit2.Text := inttostr(ord(w));

end;

 

 

2、创建一个delphi应用程序,在窗体中加入一个button1、一个edit1。声明一个子界类型值,字界类型值从1500。声明此子界类型值的一个变量z1。给这个变量赋值1000,会有何结果?请编程,并截图。

                                                       

Type

    cq1 = 1..500;

var z1:cq1;

 

procedure TForm1.Button1Click(Sender: TObject);

begin

z1 := 1000;

 

超出界限,出现错误: [Error] Unit1.pas(33): Constant expression violates subrange bounds

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值