一、大整數(shù)類型和一般的整數(shù)類型相比
大整數(shù)類型和一般的整數(shù)類型相比優(yōu)點是不會溢出,能表示任意長度的數(shù)字做各種精度的運算。
缺點是沒有直接的類型運算支持,必須像人類計算一樣按位數(shù)分別計算進(jìn)行借位/進(jìn)位操作。。好在現(xiàn)在常用語言比如Java已經(jīng)內(nèi)置大數(shù)庫,不用重復(fù)造輪子了。硬件:不直接支持運算,效率低下?,F(xiàn)在的主流計算機通常都是以寄存器為單位進(jìn)行運算,在這種架構(gòu)上實現(xiàn)大數(shù)運算一般都要從內(nèi)存讀取后操作,如果存在大量隨機讀寫大數(shù)的情況,性能甚至可能下降幾十到上百倍。
普通整數(shù):優(yōu)缺點剛好和大整數(shù)反過來,簡單快,但是會存在溢出和精度丟失問題。
為什么不做自動類型提升?因為很難做啊。首先要知道溢出是一個運行時才能完全確定的問題,那么:對于類型確定的語言根本做不到,因為類型在編譯期間已經(jīng)確定,除非重新設(shè)計一個功能更強大的編譯器。對于無類型的語言,也許可以通過把所有數(shù)都存在內(nèi)存并且設(shè)置長度與類型標(biāo)志位的方法來達(dá)到類似的效果,但是這樣程序效率一定會大大降低,并且解釋器會變得更復(fù)雜,同時會引入一套新的數(shù)據(jù)解析規(guī)則,很多庫也許都需要重寫。
既然要做無限制的提升,那么數(shù)據(jù)就不能放在寄存器中,同時還必須設(shè)計一套能夠在自動提升/降低時能夠自動申請/釋放內(nèi)存的方案,同時還必須兼顧性能……
綜上所述,具備設(shè)計開發(fā)強于GCC/LLVM等靜態(tài)編譯器,開發(fā)高效解釋語言庫,能完美解決Java的GC問題的人,才能解決這個問題。
延伸閱讀:
二、大整數(shù)BigInteger
import java.math.BigInteger;
首先,對于初始化則不像基本類型包裝這塊講著3種方式,這里只剩下valueOf() 可以對其初始化。
接著,大整數(shù)變量不能使用算術(shù)運算符,需要通過以下方法進(jìn)行運算:
add():取代了加法運算符“+”;
subtract():取代了減法運算符“-”;
multiply():取代了乘法運算符“*”;
divide():取代了除法運算符“/”;
remainder():取代了取余運算符“%”;
negate():取代了負(fù)號運算符“-”。