【发布时间】:2020-04-12 17:38:14
【问题描述】:
有人可以向我解释下面的代码吗?它采用 Integer 并将其转换为 Single 浮点数,但如果有人可以将其分解并详细说明,那将很有帮助。
singleVar := PSingle(@intVar)^
【问题讨论】:
有人可以向我解释下面的代码吗?它采用 Integer 并将其转换为 Single 浮点数,但如果有人可以将其分解并详细说明,那将很有帮助。
singleVar := PSingle(@intVar)^
【问题讨论】:
这不会将整数转换为浮点数。它将 32 位整数的字节重新解释为单个字节(也有 32 位的浮点数据类型)。
@intVar是整型数据在内存中的地址。类型是指向整数 (PInteger) 的指针。通过写PSingle(@intVar),你告诉编译器假装它是一个指向单个的指针;实际上,您告诉编译器它应该将内存中此位置的数据解释为单个数据。最后,PSingle(@intVar)^ 只是解除对指针的引用。因此,它是内存中这个位置的“single”值,即原来的字节现在interpreted为single。
将整数的字节解释为单个字节通常不会给您相同的数值。例如,如果整数值为123,则字节为7B00 0000。如果将此字节序列解释为单个字节,则会得到1,72359711111953E-43,它在数值上并不等价。
要将一个整数转换为一个整数,你可以写singleVar := intVar。
【讨论】: