展开全部
所谓有序类型呢,就是说有限可数个,并且每一个元素都有一个确定的、不可改变的前驱和后继,除了第一个元素和最后一个元素以外。这样理解吧:
integer:范围 -32768~32767,那么它的元素个数就是32767-(-32768)个,每一个元素,比如1,那么它的前驱(就是前一个元素)是0,它的后继(后一个元素)是2,不可能是别的什么数字,我们就说integer是一个有序的类型。
同理,longint也是这样。
但是real、single、double就都不是有序类型了,比如说,你能告诉我real里有多少元素吗?很明显理论上是无限个(在不考虑精度的情况下),具体一点,你能告诉我1的下一个元素是什么吗?1.1?1.01?1.001?1.0001?1.0.......01? ....... 很明显哪个也不能说是它的下一个元素因为你总能举出一个比刚才说的那些数还小而且大于1的元素,因此我们定义它为无序的。
其实检验一个类型是否有序有一个很简单的方法,就是通过for循环检验,所有能够作为for循环循环上下界的都是有序类型,其他的都不是,但是有例外的,比如int64,它也算是有序类型,但是不能使用for循环。
解释一下:
比如说:integer
var
i:integer;
begin
for i:=1 to maxint-1 do
end.
编译通过,所以integer有序。
var
c:char;
begin
for c:='a' to 'z' do
end.
编译也通过,所以char也是有序的。
而当把i的类型换成real、double、string、ansistring的时候,就发现编译错误,因为它们不是有序的,无法判断下一个元素是什么,也就无法进行循环。
有序类型大概有这些:
integer longint shortint word qword byte int64 char 枚举类型
其他的一般都不是有序的,一时说不全,你想问什么可以找我··
integer:范围 -32768~32767,那么它的元素个数就是32767-(-32768)个,每一个元素,比如1,那么它的前驱(就是前一个元素)是0,它的后继(后一个元素)是2,不可能是别的什么数字,我们就说integer是一个有序的类型。
同理,longint也是这样。
但是real、single、double就都不是有序类型了,比如说,你能告诉我real里有多少元素吗?很明显理论上是无限个(在不考虑精度的情况下),具体一点,你能告诉我1的下一个元素是什么吗?1.1?1.01?1.001?1.0001?1.0.......01? ....... 很明显哪个也不能说是它的下一个元素因为你总能举出一个比刚才说的那些数还小而且大于1的元素,因此我们定义它为无序的。
其实检验一个类型是否有序有一个很简单的方法,就是通过for循环检验,所有能够作为for循环循环上下界的都是有序类型,其他的都不是,但是有例外的,比如int64,它也算是有序类型,但是不能使用for循环。
解释一下:
比如说:integer
var
i:integer;
begin
for i:=1 to maxint-1 do
end.
编译通过,所以integer有序。
var
c:char;
begin
for c:='a' to 'z' do
end.
编译也通过,所以char也是有序的。
而当把i的类型换成real、double、string、ansistring的时候,就发现编译错误,因为它们不是有序的,无法判断下一个元素是什么,也就无法进行循环。
有序类型大概有这些:
integer longint shortint word qword byte int64 char 枚举类型
其他的一般都不是有序的,一时说不全,你想问什么可以找我··
展开全部
pascal自带:整形、实数类型、字符(串)类型、数组等。
自定义(type):集合、记录等。
自定义(type):集合、记录等。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
各种 整形类型(integer, byte, longint, ...), 字符类型(char) 都是有序类型。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
……有序类型貌似很多……还有楼主能不能说明白点……我小白不太好理解
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询