Pascal 的定长与平台依赖基本类型
pascal吧
全部回复
仅看楼主
level 1
黄金止手 楼主
介绍定长类型时用的是类型本名。
平台依赖类型是定长类型的别名。在不同平台下,同一平台依赖类型的名称可能是不同定长类型的别名。
但 Real 类型是例外, 虽然本质上是 Single 或 Double ,但 Real 也是本名。
每个基本类型占用空间大小为位数除以 8 。例外是 Boolean 仅 1 位有效,但也占用 1 字节。
定长类型
8 位无符号整数 Byte
8 位有符号整数 ShortInt
16 位无符号整数 Word
16 位有符号整数 SmallInt
32 位无符号整数 LongWord (别名 DWord、Cardinal)
32 位有符号整数 LongInt
64 位无符号整数 QWord
64 位有符号整数 Int64
8 位无符号字符 Char (别名 AnsiChar)
16 位无符号字符 WideChar (别名 UnicodeChar)
1 位逻辑类型 Boolean
8 位逻辑类型 ByteBool
16 位逻辑类型 WordBool
32 位逻辑类型 LongBool
64 位逻辑类型 QWordBool
32 位 IEEE754 浮点数 Single
64 位 IEEE754 浮点数 Double
80 位 x86 扩展精度浮点数 Extended
64 位有符号实型整数 Comp
64 位定点数 Currency
注:Comp 只能取整数值且范围与 Int64 完全相同,对于同一值 Comp 和 Int64 的内部表示也完全相同。即是说 Comp 本质上是 Int64 ,但被编译器视作实数类型。
Currency 是定点数。对于内部表示相同的 Int64 和 Currency 变量, Currency 变量的值是 Int64 变量的值乘 0.0001 。
平台依赖类型
模式依赖整数 Integer
在默认(FPC)、TP、MacPas 模式下 Interger 为 SmallInt 之别名,在 Delphi 、ObjFPC 模式下 Integer 为 LongInt 之别名。
有符号大小整数 SizeInt
无符号大小整数 SizeUInt
SizeInt 为 SizeUInt 的有符号版本。任一变量的大小必须同时在 SizeInt 和 SizeUInt 的范围内。数组下标若为整数(或顺序类型),则其值(或序数)必须在 SizeInt 的范围内。
SizeUInt 等于 C 的 size_t 。
SizeInt 大致可以看成 C 的 ptrdiff_t (可用于指针算术相减的有符号整数)。
有符号指针整数 PtrInt
无符号指针整数 PtrUInt
这两种整数类型与该平台的指针等长。分别等于 C 的 intptr_t 和 uintptr_t 。
有符号原生整数 NativeInt
无符号原生整数 NativeUInt
与平台处理位宽等长的整数,可以认为是当前程序中最快的整数。
有符号值整数 ValSInt
无符号值整数 ValUInt
在求值时用到的整数类型,read/write 系列也使用这种类型。基本上等于 NativeInt 和 NativeUInt 。
平台依赖实数 Real
在支持 Double 的平台下实质等同于 Double 。其他平台下可能等同于 Single 。
注意 Real 是本名。即 procedure Foo(x:Double) 和 procedure Foo(x:Real) 是允许重载的。
值实数 ValReal
根据平台区别,可能定义为 Extended 、Double 、Single 的别名。
可以认为是这三种类型中,平台下原生指令支持(非模拟)的最高精度者。
使用平台依赖类型可以在一定场合下提供更好的代码兼容性。
2016年08月23日 09点08分 1
1