gpt4 book ai didi

delphi - LongInt 与 Integer、LongWord 与 Cardinal 的区别

转载 作者:行者123 更新时间:2023-12-03 14:43:35 26 4
gpt4 key购买 nike

在Delphi中,LongInt和Integer、LongWord和Cardinal有什么区别?

有时我会发现DWORD的用法,它是什么?

它们在所有版本的 Delphi 中都是一致的吗?我应该坚持哪一个?

最佳答案

简而言之:Longint 和 Longword 是固定大小的整数,前者有符号,后者无符号,通常都是 32 位大小。 Their size is platform-dependent在 XE8 中,但在 XE7 及更早版本中固定大小(32 位)。

整数和基数没有固定大小。它们是所谓的“通用”整数(不要将其与泛型混淆,泛型是一双不同的鞋),即,无论大小如何,当需要整数类型时最好使用它们。根据版本和平台的不同,Integer 和 Cardinal 的大小可能会有所不同。目前,它们的大小和类型与 Longint 和 Longword 相同。

固定大小类型的大小在版本或平台之间没有差异。当您必须与来自您自己的程序之外的其他来源的代码或数据进行交互时,换句话说,在精确的二进制兼容性很重要的情况下,您应该使用这些类型。调用API函数时。因此使用 DWORD 等类型。

请注意,当前版本具有 Byte 或 Smallint 等类型的别名。它们是 Int8、UInt8、Int16、UInt16 等……直到 UInt64。 ISTM 认为这些名称比例如“更容易记住” “Smallint”(16 位签名)或“Shortint”(8 位签名)。

因此,只要有可能,就使用 Integer 和 Cardinal,因为它们可能是平台和版本的理想类型。当需要与其他数据精确的二进制兼容性时,请使用固定大小类型,例如 Byte、Smallint、Longint 或 UInt64(仅举几例)。

更新

由于存在一些困惑(请参阅顶部附近的链接),并且由于现在不再将 Longint 和 Longword 视为独立于固定大小的平台,但奇怪的是,Integer 和 Cardinal 被视为固定大小,我越来越倾向于使用 (U)IntXX 版本,例如 UInt16 或 Int32。一个异常(exception)是我对 Byte 的使用,我无法想象它的大小会改变(1)。

当然,我会使用 Integer 和 Cardinal 来处理任何需要整数类型且大小不那么重要的情况,例如for循环计数器等

关于delphi - LongInt 与 Integer、LongWord 与 Cardinal 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24507704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com