python如何表示如此大的整数



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

基本上,Python中的大数字存储在"数字"数组中。这是引用的,对,因为每个"数字"实际上本身就是一个相当大的数字。)

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

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

/* 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];
};

Python怎么可能计算出这些大数字?

如果您只有 10 位数字 0-9,您怎么可能计算这些大数字?好吧,您使用了多个数字!

Bignum算术的工作方式相同,只是单个"数字"不是0-9,而是0-4294967296或0-18446744073709551616。

相关内容

  • 没有找到相关文章

最新更新