python如何表示如此大的整数?

cha*_*pkr 4 python architecture integer

在C,C++和Java中,整数具有一定的范围.我在Python中意识到的一件事是,我可以计算出非常大的整数,例如pow(2, 100).在C中,相同的等效代码pow(2, 100)显然会导致溢出,因为在32位架构中,无符号整数类型的范围为0到2 ^ 32-1.Python如何计算这些大数字?

rai*_*7ow 8

基本上,Python中的大数字存储在"数字"数组中.这是正确的,因为每个'数字'本身实际上可能是一个很大的数字.)

您可以在longintrepr.hlongobject.c中查看实现的详细信息:

有两组不同的参数:一组用于30位数字,以无符号32位整数类型存储,另一组用于15位数字,每个数字存储在无符号短整数中.在配置时或在pyport.h中定义的PYLONG_BITS_IN_DIGIT的值用于决定使用哪个数字大小.

/* Long integer representation.
    The absolute value of a number is equal to
    SUM(for i=0 through abs(ob_size)-1) ob_digit[i] * 2**(SHIFT*i)
    Negative numbers are represented with ob_size < 0; 
      zero is represented by ob_size == 0.

    In a normalized number, ob_digit[abs(ob_size)-1] (the most significant
      digit) is never zero.  Also, in all cases, for all valid i,
        0 <= ob_digit[i] <= MASK.

    The allocation function takes care of allocating extra memory
    so that ob_digit[0] ... ob_digit[abs(ob_size)-1] are actually available.

*/

struct _longobject {
   PyObject_VAR_HEAD
   digit ob_digit[1];
};
Run Code Online (Sandbox Code Playgroud)