整数类型表示全部数字的子界。一般的整数类型是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类型。因此,下面的代码将执行后得到的结果是不正确的:
var
I: Integer;
J: Int64;
…
I := High(Integer);
J := I + 1;
要使返回值是Int64类型,在上面的情况中可以将 I 转换为Int64:
…
J := Int64(I) + 1;
更多信息见算术运算符。
注意:大多数标准例程在处理Int64值的时候,都将参数截断为32位。不过,High、Low、Succ、Pred、Inc、Dec、IntToStr、IntToHex等例程完全支持Int64参数。此外,Round、Trunc、StrToInt64、StrToInt64Def等函数也可以返回Int64值。少数例程根本不能将Int64值作为参数,如Ord。
对于整数类型,当要递增最后一个值或要递减第一个值的时候,运算结果将在范围的起点和中点之间环绕。例如,ShortInt类型的范围是 -128..127,因此,执行下面的代码:
var I: Shortint;
…
I := High(Shortint);
I := I + 1;
之后,变量 I 的值为 –128。如果范围检查编译指示有效({$R+},缺省为{$R-}),那么上面的代码将产生一个运行时错误。