Python int 最大最小值
若有错误还请大佬指出
Answer
不多说,先上答案:注:这是理论上
\(\mid\) :这个表示整除
e.g. : \(5\mid2=2\)
max
32位
\[2^{32\times(2^{31}-1)\mid 5\times5} \]64位
\[2^{32\times(2^{63}-1)\mid 5\times5} \]min
32位
\[-2^{32\times(2^{31}-1)\mid 5\times5} \]64位
\[-2^{32\times(2^{63}-1)\mid 5\times5} \]Because
以下知识涉及到 C语言
以下都以 64 位来举例
int 的基本结构
// Python 源码
typedef __int64 Py_ssize_t;
...
#define PyObject_VAR_HEAD PyVarObject ob_base;
...
typedef struct {
PyObject ob_base;
Py_ssize_t ob_size; /* Number of items in variable part */
} PyVarObject;
...
typedef uint32_t digit; // 无论是 32bits 还是 64bits, `digit` 都是 uint32_t
struct _longobject {
PyObject_VAR_HEAD
digit ob_digit[1];
};
过程
max
从上可以知道,ob_size
是存的 ob_digit
的表示的长度,所以 ob_digit
最多可以有 LLONG_MAX
个 digit
,也就是 \(2^{63}-1\) 个 digit
。
因为 digit
是 uint32_t
,所以 ob_digit
最大可以有 \(32\times(2^{63}-1)\) 个 bit 。
在 Python 中有个机制,就是如果 ob_digit
可以用 \(16\) 个 bit 的话那就只用其中的 \(15\) 个 bit 。
这个数量是向 \(5\) 对齐的 。可以用 \(x\mid 5\times 5\) 求出,其中 x 表示可用的 bit。
所以 ob_digit
最多有效的 bit 个数是 \(32\times(2^{63}-1)\mid 5\times5\) 个。
然后直接求出最大值是 \(2^{32\times(2^{63}-1)\mid 5\times5}\)。
min
注意这个 Py_ssize_t
它是一个 __int64
,是一个有符号的。ob_size
是正数那么这个 int
就是正的,ob_size
是负数那么这个 int
就是负的。
也就是 ob_size
的符号就是这个 int
的符号。
所以最小值是 \(-2^{32\times(2^{63}-1)\mid 5\times5}\)
标签:digit,mid,Python,32,ob,times,int,最小值,times5 From: https://www.cnblogs.com/kuailedetongnian/p/17068375.html