我了解到在Python中,整数精度仅限于硬件的约束。如果您使用2的补码表示已签名的整数,则符号扩展将永久继续。 Python是否使用符号位代替它们?或其他什么?
答案 0 :(得分:2)
CPython(最常见的实现)将整数存储为PyLong
类型,其中包含任意数量的“片段”,这些片段是无符号数。存储在每个ob_size
中的通用字段PyVarObject
中存储了多少条的计数。此字段为described,如下:
对于静态分配的类型对象,应将其初始化为零。对于动态分配的类型对象,此字段具有特殊的内部含义。
确实对于PyLong
,它的含义非常特殊:它是数字中的片数,但当数字为负时,ob_size
为负数。
您可以在_PyLong_Negate()
,https://github.com/python/cpython/blob/master/Objects/longobject.c#L73或PyLong_FromDouble()
中更清晰地看到它:https://github.com/python/cpython/blob/master/Objects/longobject.c#L328 - 请注意Py_SIZE()
只是ob_size
字段的访问者。
答案 1 :(得分:1)
Here是Laurent Luce关于Python整数的博客文章。看起来(在最常见的Python实现中,CPython),整数存储为带符号的long
值,除了为更快访问而管理的非常小的值。 \