gpt4 book ai didi

delphi - 为什么我的申请中的 Cardinal 类型发生了变化?

转载 作者:行者123 更新时间:2023-12-03 15:50:30 24 4
gpt4 key购买 nike

我这里有一个程序,它在 Delphi 3 中运行良好,我在 Turbo Delphi 2006 上编译并测试了它,发现了一个问题。问题是这样的:我使用“基数”数据类型作为某些内容的索引。它在 Delphi 3 中工作,但我发现值比 Turbo Delphi 2006 编译版本中应有的值大大约 128-256 左右,具体取决于具体数据。将这些数据类型更改为“longint”解决了问题,因此程序可以在两个编译器中正常运行。

问题:这是为什么?

我的理解是基数数据类型只是典型的无符号整数数据。这与它们在本程序中的应用是一致的,特别是Delphi 3编译工作正确的事实证明了这一点。那么为什么 Turbo Delphi 2006 编译不工作呢?

最佳答案

在 Delphi 中,无符号类型只是下一个更大的有符号类型的子范围类型。在 Delphi 3 中,没有 64 位类型,因此没有下一个更大的类型可以作为 Cardinal 的子范围。由于语言的技术限制,Cardinal 是 Delphi 3 中的有符号类型。 Delphi 4 引入了 Int64,Cardinal 被设为该类型的无符号子范围(然后限制是它不是无符号 64 位类型)。

简而言之,您一开始就从未获得真正的未签名行为。现在您已经升级了,您已经暴露了代码中一直存在的长期存在的问题。

您的代码已编译并不能证明您的代码是正确的。 Delphi 3 无法强制执行需要它实际上并不具有的类型的规则。

关于delphi - 为什么我的申请中的 Cardinal 类型发生了变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13972762/

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