FixedInt在所有32位与64位平台上均为32位吗?
FixedInt与LongInt的类型特性澄清
简短结论
- FixedInt是平台无关的固定32位有符号整数类型,仅在Windows平台上等价于LongInt
- LongInt是平台相关类型,其字节长度随目标平台变化
详细解析
FixedInt的定义与特性
根据官方文档,FixedInt的定义与特性如下:
type FixedInt = Integer;定义了一个32位有符号整数类型,在所有32位和64位平台上均固定为32位,取值范围为**-2147483648到2147483647**。
- 在Windows平台(32位和64位)上,
FixedInt等价于LongInt类型。
这一点在System.pas源码中也得到了验证:
{$IFDEF MSWINDOWS} FixedInt = LongInt; FixedUInt = LongWord; {$ENDIF}
LongInt的平台相关性
LongInt是平台相关的有符号整数类型,其大小和取值范围由目标平台决定:
type Longint = { built-in type };平台相关的有符号整数类型,大小和取值范围取决于目标平台:
- 在32位平台(含32位Windows、Android)和64位Windows平台上,
LongInt为4字节有符号整数,取值范围是**[-2147483648 .. 2147483647]**(即-2³¹到2³¹⁻¹)。- 在64位POSIX平台(Android、iOS、Linux、macOS)上,
LongInt为8字节有符号整数,取值范围是**[-9223372036854775808 .. 9223372036854775807]**(即-2⁶³到2⁶³⁻¹)。- 注:若需固定4字节有符号整数类型,建议使用
Integer或FixedInt。
核心疑问解答
FixedInt不会随平台变化改变自身长度,它确实是平台无关的固定32位类型。文档中关于“FixedInt等价于LongInt”仅限定在Windows平台——而Windows平台上的LongInt本身就是32位,这和FixedInt的32位特性并不冲突。
在非Windows平台(比如64位POSIX系统),FixedInt依然保持32位,不会因为LongInt变成64位而改变,不存在文档错误的情况。
内容的提问来源于stack exchange,提问作者Ian Boyd
相关产品推荐
相关产品推荐

