“逢二進一”的算術
人類對於司空見慣的東西,總是覺得是天經地義的。孩子們從小就學習“逢二進一”的算術,隨著年齡的增長,和這種數製打交道越來越多。很少有人懷疑並追究這種數製的由來。其實,十進位製源於人類的10個手指。在遠古時代,人們是用扳動手指來計數的,2000年前古羅馬的數字和中國的記數符號,都是由此而起源的。
可以想象,假如在數億年的進化過程中,人類生就的是光禿禿的兩個拳頭,那麼他們所用的數製大約會是“逢二進一”。
桌上放著一打鉛筆,我們會準確無誤地寫出鉛筆的數目為“12”。倘若有誰寫成“1100”,大家都會認為是荒謬的。然而,這卻正是使用“二進位製”的記號。為了今後不至於引起混亂,我們用下標(2)表示進位製下的數。例如;
1100(2)=1×23+1×22+0×21+0=8+4=12;
10101(2)=1×24+0×23+1×22+0×21+1
=16=4+1=21
上麵幾式的右端,實際表明了怎樣把二進製數化為常用的十進製數。至於怎樣把十進製數化為二進製數,下麵提供的是一種有效的途徑。比如,要把71寫成二進製數。如下式,我們將71除以2,餘數寫在右邊。如果除盡,則寫0。
將商再除以2,重複上述過程,直到商等於1為止。這個1也寫到右邊餘數那列的最下麵,再從下到上寫成一行數,它便是71的二進製數的表示法:
71=1000lll2
二進製的最大優點是,每個數位都隻有0與互兩種狀態,這使得我們可以通過簡單的方法,例如白與黑、虛與實、負與正、點與劃、小與大、暗與亮等等加以表示。下表所列的是71用二進製的幾種表示方法。當然,二進製也有不足,正如大家看到的那樣,同一個數目在二進製中要比在十進製中位數多得多。也有些問題在古進製中顯得很複雜,但在二進製中卻十分簡單。下麵一則古老而有趣的傳說,頗為生動地體現了這一點:
印度的舍罕王打算重賞國際象棋的發明者宰相西薩·班·達依爾。這位聰明的大臣向國王請求說:“陛下我什麼也不要,隻請您在第一個小格內放一粒米;在第二個小格內放兩粒;第三格放四粒;照這樣下去每一小格內都比前一小格加一倍。把棋盤上64格的米粒都恩賜給我!”
國王慷慨答應了西薩·班·達依爾的要求。他覺得宰相的請示未免過於寒酸。
可是國王很快發現自己的諾言是無法實現的,因為他需要付出的米粒數是:
=18446744073709551615
這是一個長達20位的天文數字!
最後西薩·班會因為國王無法忍受沒完沒了的債務而丟掉腦袋。
不過,我們要說的是:如果使用二進製,西薩·班所要求的賞賜,隻是一個形式簡單的數字。
讀者想必對小學裏背誦的“九九乘法表”記憶猶新。那是一件十分辛苦而費時的事。然而對於二進製數來說,各種運算規則全都出奇地簡單。任何人在半分鍾之內,都能把它背得滾瓜爛熟:
運算規則可以歸納為八個字:“格式照舊,逢二進一。”利用這一規則,可以很容易地實現二進製數的四則運算。下一位的1+l。
讀者可以自行設計更多的練習。目前,這種隻有“0”、“1”“兩個數字的二進製係統,已成為計算機最為理想的數字語言。