這道問題,是朋友均爺早前向我提問的。後來想起來,有次他回港,一班朋友去食糖水時也提過此問題。
我想常接觸程式設計的朋友會很快便想到答案。
一般來說,我們中學時學習二進數?為的是甚麼?考試。
數,二進也好,十進也好,也只是用來計算,計算以外還有甚麼用途?大家很少深究。
一般書籍上,也說電子零件中有兩種狀態,通電和不通電,因此用二進制來表示數,在電腦中是很自然的事。電腦人很自然想到生死也是兩個狀態,因此很快得出答案。
但此問題,我主要不是因為這樣而得出答案。而單單說二進制數來處理電腦運算,我覺得也不盡正確。我認為關鍵不在於進制,而是在於數字的表示系統。
我的答案來源,就是數字的表示系統:現今流行的阿拉伯數字。
這個問題,很多人都可能沒有想過。阿拉伯數字有何優越之處?
在人類社會,有史以來大部分文化也是用十進制,但數字表示系統各有不同。大家都可能學過羅馬數字吧?羅碼數字,也是表示十進制數,但數字越大,越須更多字符,那些 I, X, C, V, M,再大上去如何?分分鐘 26 個字母也不夠。
阿拉伯數字表示法,在十進制,只須 10 個字符,例如我們現今常用的 0, 1, 2, 3, …, 9。數字越大,只是字串越長,你仍舊用 10 個字符便可。
1 個位可以表示 10 個數。
2 個位可以表示 102 = 100 個數,如此類推。
而我們所謂的二進制數,其實也可以有很多種表示方法,常用的就是這種阿拉伯表示方法。
隨著不同的進制,可用字符數目不同,但字串越長,所表示的數目便可以幾何級數般增長。
阿拉伯數字,除了表達上的優越,還有運算上的優越,有機會再與大家談談。
其實,大家知道嗎?這種優越的表數系統,不是阿拉伯人發明,是由印度人發明。阿拉伯人則是把這系統傳入歐洲呢。
想越來,現實生活中,例如測試農藥,可用這方法嗎?前提是,不要過於稀釋。
我覺得其實二進制,八進制,十進制,十六進制都很偉大,因為可代表的東西隨位數成爆炸性增長。在二進制中,你只要加上多一個位,就可以表示多一倍的數值。這概念在資訊爆炸的年代尤其重要,所有 indexing 的 algorithm 都要用上。
但其實在電腦未普及時我們已經用到 indexing,其中一個例子就是英文字典。我們只要核對幾個英文字母就可以從幾萬個英文字串中找到想查的字,這是一個 log(n) 的 alogrithm。雖然我們平時不會這樣去理解,但英文字可算是廿六進數;只是其實中大多的「數字」/組合都沒有意義。因為大多的組合都沒有意義,英文其實是「資訊含量」很底的文字;而數字則是資訊含量極高的「文字」。
曾經同朋友吹水說,如果電腦由中國人發明,那電腦發展史一定會很不同。首先,壓縮技術會很遲才出現,因為中文字用 16-bit 去表示的話,資訊含量已經很高;但 binary search 等 algorithm 則會很早發展出來,因為中文沒有一個很自然的 indexing 方法。
Post preview:
Close preview