gpt4 book ai didi

python - 在 Python 中,如何翻译 *(1+(int*)&x)?

转载 作者:太空狗 更新时间:2023-10-30 02:19:05 24 4
gpt4 key购买 nike

这个问题是this one的后续问题.在 Sun's math library (在 C 中),表达式

*(1+(int*)&x)

用于获取 float x的高位字。此处假定操作系统为 64 位,采用小端表示法。

我在想如何把上面的C表达式翻译成Python?这里的难点在于如何翻译表达式中的'&'和'*'。顺便说一句,也许 Python 有一些内置函数可以检索 float 的高位字?

最佳答案

您可以使用 struct 更轻松地完成此操作:

high_word = struct.pack('<d', x)[4:8]
return struct.unpack('<i', high_word)[0]

在这里,high_wordbytes对象(或 2.x 中的 str)由 x 的四个最高有效字节组成以小端顺序(使用 IEEE 64 位浮点格式)。然后我们将它解压回一个 32 位整数(它在一个单例元组中返回,因此是 [0] )。

无论您平台的底层字节顺序如何,这始终对所有内容使用小端。如果您需要使用 native 字节顺序,请替换 <= (并使用 >! 强制大端)。它还保证 64 位 double 和 32 位整数,而 C 不保证。您也可以删除该保证,但没有充分的理由这样做,因为它会使您的问题变得荒谬。

虽然这可以用指针运算来完成,但它会涉及到 ctypes 的困惑。并且从 Python float 到 C float 的转换仍然是相对昂贵的。 struct代码更易于阅读。

关于python - 在 Python 中,如何翻译 *(1+(int*)&x)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32320974/

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