2016-11-04 51 views
3

我瞭解到,在Python中,整數精度僅限於硬件的約束條件。如果您要使用2的補碼來表示帶符號的整數,則符號擴展將永遠持續。 Python使用符號位來表示它們嗎?或者是其他東西?在Python中如何表示-1(或任何負值)?

+2

Python的哪個實現?在哪個硬件上? –

+2

Python語言沒有定義它們的存儲方式,它依賴於實現。 – cdarke

回答

3

CPython(最常見的實現方式)將整數存儲爲PyLong類型,其中包含任意數量的無符號數的「塊」。存在於每個PyVarObject中的通用字段ob_size中存儲了多少件的計數。該字段爲described爲:

對於靜態分配的類型對象,應將其初始化爲零。對於動態分配的類型對象,此字段具有特殊的內部含義。

而且確實PyLong,其含義是比較特別:它是在件數的計數,但是當數字爲負,ob_size爲負。在PyLong_FromDouble()更清楚地https://github.com/python/cpython/blob/master/Objects/longobject.c#L73或許,在這裏:

你可以看到它在行動_PyLong_Negate(),這裏https://github.com/python/cpython/blob/master/Objects/longobject.c#L328 - 注意Py_SIZE()只是爲ob_size領域的訪問。

1

Here是來自Laurent Luce的關於Python整數的博客文章。它看起來像(在最常見的Python實現中,CPython),整數存儲爲有符號的long值,但爲了更快訪問而管理的非常小的值除外。 \

相關問題