Python中如何表示-1(或任何负值)?

3

我了解到在Python中,整数的精度仅限于硬件的限制。如果您想用2的补码表示有符号整数,那么符号扩展将会无限进行下去。Python是否使用符号位来表示它们呢?还是其他方式?


2
使用哪个Python实现?在哪种硬件上? - Morgan Thrapp
2
Python语言并没有定义它们是如何存储的,这取决于实现方式。 - cdarke
2个回答

2
CPython(最常见的实现)将整数存储为PyLong类型,其中包含任意数量的“pieces”,这些“pieces”是无符号数字。有多少个pieces存在于每个PyVarObject中通用字段ob_size中。该字段被描述为:在此处
“对于静态分配的类型对象,应将其初始化为零。对于动态分配的类型对象,此字段具有特殊的内部含义。”
对于PyLong,它的含义确实非常特殊:它是数字中pieces的计数,但当数字为负数时,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

这里是Laurent Luce关于Python整数的博客文章。看起来(在最常见的Python实现CPython中),整数被存储为带符号的long值,除了一些非常小的值,这些值被管理以提高访问速度。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接