本次分析基于 CPython 解釋器,python3.x版本
創(chuàng)新互聯(lián)建站網(wǎng)站建設(shè)公司是一家服務(wù)多年做網(wǎng)站建設(shè)策劃設(shè)計制作的公司,為廣大用戶提供了成都網(wǎng)站建設(shè)、成都網(wǎng)站制作,成都網(wǎng)站設(shè)計,廣告投放,成都做網(wǎng)站選創(chuàng)新互聯(lián)建站,貼合企業(yè)需求,高性價比,滿足客戶不同層次的需求一站式服務(wù)歡迎致電。在python2時代,整型有 int 類型和 long 長整型,長整型不存在溢出問題,即可以存放任意大小的整數(shù)。在python3后,統(tǒng)一使用了長整型。這也是吸引科研人員的一部分了,適合大數(shù)據(jù)運(yùn)算,不會溢出,也不會有其他語言那樣還分短整型,整型,長整型...因此python就降低其他行業(yè)的學(xué)習(xí)門檻了。
那么,不溢出的整型實(shí)現(xiàn)上是否可行呢?
不溢出的整型的可行性
盡管在 C 語言中,整型所表示的大小是有范圍的,但是 python 代碼是保存到文本文件中的,也就是說,python代碼中并不是一下子就轉(zhuǎn)化成 C 語言的整型的,我們需要重新定義一種數(shù)據(jù)結(jié)構(gòu)來表示和存儲我們新的“整型”。
怎么來存儲呢,既然我們要表示任意大小,那就得用動態(tài)的可變長的結(jié)構(gòu),顯然,數(shù)組的形式能夠勝任:
[longintrepr.h]
struct _longobject {
PyObject_VAR_HEAD
int *ob_digit;
};
長整型的保存形式
長整型在python內(nèi)部是用一個 int 數(shù)組( ob_digit[n] )保存值的. 待存儲的數(shù)值的低位信息放于低位下標(biāo), 高位信息放于高下標(biāo).比如要保存 123456789 較大的數(shù)字,但我們的int只能保存3位(假設(shè)):
ob_digit[0] = 789; ob_digit[1] = 456; ob_digit[2] = 123;