2016-11-04 3 views
3

私は、Pythonで整数精度はハードウェアの制約にのみ制限されることを知りました。 2の補数で符号付きintを表現する場合、符号拡張は永遠に続くでしょう。 Pythonは代わりに符号ビットを使ってそれらを表現していますか?または、他の何か?-1(または任意の負の値)はPythonでどのように表現されますか?

+2

Pythonのどの実装ですか?どのハードウェアですか? –

+2

Python言語では、格納方法が定義されていないため、実装に依存しています。 – cdarke

答えて

3

CPython(最も一般的な実装)は、符号なしの数値である任意の量のピースを含むPyLongタイプの整数を格納します。そこに何個あるかのカウントは、PyVarObjectに存在する汎用フィールドob_sizeに格納されます。このフィールドはdescribedで、

のように、これはゼロに初期化する必要があります。動的に割り当てられた型オブジェクトの場合、このフィールドは特別な内部的な意味を持ちます。 PyLongため

そして実際、その意味は非常に特別である:それは数枚のカウントであるが、その数が負の場合、ob_sizeは負です。

あなたはここで、_PyLong_Negate()でアクションでそれを見ることができます:PyLong_FromDouble()でも、より明確に、おそらくhttps://github.com/python/cpython/blob/master/Objects/longobject.c#L73かを、ここで:https://github.com/python/cpython/blob/master/Objects/longobject.c#L328からPy_SIZE()ob_sizeフィールドのためだけのアクセサであることに注意してください。

1

Hereは、Laurent Luce on Python整数のブログ記事です。最も一般的なPythonの実装であるCPythonのように見えますが、整数は符号付きのlongという値で保存されますが、アクセスが高速になるように管理されている非常に小さい値は除きます。 \

関連する問題