Free Pascal 学习笔记 第四章 基本类型

基本类型

 

基本类型分为序数类型与实数类型两大类。

.序数类型 ordinal types

除浮点类型外,所有基本类型均为序数类型,可分为整数类型、布尔类型、枚举类型、子界类型。

  1. 序数类型是可计数的有序的,可进行Inc,Ord,Dec 等操作。

  2. 序数值具有最小的可能值。如果启用了范围检查,尝试将Pred函数应用到尽可能小的值将产生范围检查错误。

  3. 序数值具有最大可能值。如果启用了范围检查,尝试将Succ函数应用到尽可能大的值将产生范围检查错误。


 

1.1整数类型 integers

类型

范围

字节

Byte

0 .. 255

1

Shortint

-128 .. 127

1

Smallint

-32768 .. 32767

2

Word

0 .. 65535

2

Integer

smallint 或者longint

size 2 or 4

Cardinal

longword

4

Longint

-2147483648 .. 2147483647

4

Longword

0 .. 4294967295

4

Int64

-9223372036854775808 .. 9223372036854775807

8

QWord

0 .. 18446744073709551615

8


 

1.2布尔类型 boolean types

布尔类型实际上也是整数类型,True和False的值分别为1和0

ByteBool,WordBool,LongBool,QWordBool分别等值于Byte,Word,Longint,Int64

类型

字节

Ord(True)

Boolean

1

1

Boolean16

2

1

Boolean32

4

1

Boolean64

8

1

ByteBool

1

Any nonzero value

WordBool

2

Any nonzero value

LongBool

4

Any nonzero value

QWordBool

8

Any nonzero value

示例:

 B := True;  

 B := False;  

 B := 1<>2;  { 相当于 B := True } B := True;  

 B := False;  

 B := 1<>2;  { 相当于 B := True } 

备注:在Free Pascal中,默认情况下当知道结果时,将不再对表达式的其余部分求值:这称为快捷布尔值求值。

B := False; 

A := B and Func; 
函数Func将永远不会被调用,它可能会产生奇怪的副作用。 
如果使用{$B +}编译指令,则Func函数会被调用。默认为{$B -}

函数Func将永远不会被调用,它可能会产生奇怪的副作用。 
如果使用{$B +}编译指令,则Func函数会被调用。默认为{$B -}

1.3枚举类型 enumeration types

枚举类型声明如下:
Type 

	Direction = ( North, East, South, West );

Free Pascal还允许枚举类型的C样式扩展 
Type 

 EnumType = (one, two, three, forty := 40,fortyone);

枚举元素应按升序排列。以下将产生编译器错误 
Type 

 EnumType = (one, two, three, forty := 40, thirty := 30); 

注意事项:
枚举类型不能使用Pred和Succ函数。
枚举类型使用默认值存储,与默认值的实际数量无关,编译器不会尝试优化空间。可以通过{$ PACKENUM n}编译器指令更改此行为,该指令告诉编译器用于枚举类型的最小字节数。例如 

Type 

{$PACKENUM 4} 

 LargeEnum = ( BigOne, BigTwo, BigThree ); 

{$PACKENUM 1} 

 SmallEnum = ( one, two, three );  


Var S : SmallEnum;  

    L : LargeEnum;  

begin  

  WriteLn (’Small enum : ’,SizeOf(S));  

  WriteLn (’Large enum : ’,SizeOf(L));  

end.
运行时将会打印以下内容:
Small enum : 1 

Large enum : 4

Type 

	Direction = ( North, East, South, West );

Free Pascal还允许枚举类型的C样式扩展 
Type 

 EnumType = (one, two, three, forty := 40,fortyone);

枚举元素应按升序排列。以下将产生编译器错误 
Type 

 EnumType = (one, two, three, forty := 40, thirty := 30); 

注意事项:
枚举类型不能使用Pred和Succ函数。
枚举类型使用默认值存储,与默认值的实际数量无关,编译器不会尝试优化空间。可以通过{$ PACKENUM n}编译器指令更改此行为,该指令告诉编译器用于枚举类型的最小字节数。例如 

Type 

{$PACKENUM 4} 

 LargeEnum = ( BigOne, BigTwo, BigThree ); 

{$PACKENUM 1} 

 SmallEnum = ( one, two, three );  


Var S : SmallEnum;  

    L : LargeEnum;  

begin  

  WriteLn (’Small enum : ’,SizeOf(S));  

  WriteLn (’Large enum : ’,SizeOf(L));  

end.
运行时将会打印以下内容:
Small enum : 1 

Large enum : 4

1.4 子界类型 subrage types

子界类型是序数类型(主类型)中的值范围。要定义子界类型,必须指定该类型的最高和最低值 。

一些预定义的整数类型被定义为子范围类型 
Type 

 	Longint  = $80000000..$7fffffff; 

 	Integer  = -32768..32767; 

 	shortint = -128..127; 

 	byte     = 0..255; 

 	Word     = 0..65535;

还可以在枚举类型使用子界类型:
Type 

 	Days = (monday,tuesday,wednesday,thursday,friday, saturday,sunday); 

 	WorkDays = monday .. friday; 

 	WeekEnd = Saturday .. Sunday;
Type 

 	Longint  = $80000000..$7fffffff; 

 	Integer  = -32768..32767; 

 	shortint = -128..127; 

 	byte     = 0..255; 

 	Word     = 0..65535;

还可以在枚举类型使用子界类型:
Type 

 	Days = (monday,tuesday,wednesday,thursday,friday, saturday,sunday); 

 	WorkDays = monday .. friday; 

 	WeekEnd = Saturday .. Sunday;

、实数类型

Free Pascal仅支持IEEE浮点类型,使用数学协处理器处理浮点计算。Real类型在本机上可以是Single或是Double类型,取决于本机处理器。

类型

范围

有效位数

字节

Real

依赖平台

???

4 或 8

Single

1.5E-45 .. 3.4E38

7–8

4

Double

5.0E-324 .. 1.7E308

15–16

8

Extended

1.9E-4932 .. 1.1E4932

19–20

10

Comp

-2E64+1 .. 2E63-1

19–20

8

Currency

-922337203685477.5808 .. 922337203685477.5807

19–20

8

  

注意:

1.实际上Comp类型是一个64位的integer,但并不是所有的平台都支持。

2.Currency类型是定点real类型,内部使用它作为64位整数类型(自动按系数10000缩放),这可以最大限度地减少舍入误差。使用这种类型时应小心:在使用乘法等表达式时,如果中间结果超出货币范围,则表达式的计算可能会出错(失去精度)。


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值