前言
不溢出的整型的可行性
[longintrepr.h]
struct _longobject {
PyObject_VAR_HEAD
int *ob_digit;
};
长整型的保存形式
ob_digit[0] = 789;
ob_digit[1] = 456;
ob_digit[2] = 123;
#define PyLong_SHIFT 15
#define PyLong_BASE ((digit)1 << PyLong_SHIFT)
#define PyLong_MASK ((digit)(PyLong_BASE - 1))
长整型的运算
ob_digit[2]
ob_digit[1]
ob_digit[0]
加数a
23
934
543
加数b
+
454
632
结果z
24
389
175
[longobject.c]
static PyLongObject * x_add(PyLongObject *a, PyLongObject *b) {
int size_a = len(a), size_b = len(b);
PyLongObject *z;
int i;
int carry = 0; // 进位
// 确保a是两个加数中较大的一个
if (size_a < size_b) {
/