6.4二進位制的應用-現代計算機

6。1語句與公式

6。2符號的模擬——算術

6。3符號的規則操作——計算

6。4二進位制的應用——現代計算機

所有進位制的位置記數法原理上等價,實踐中不同進位制的記數法有不同的適用性。二進位制是用0、1這兩個數字,以及逢二進一的規則來表示所有的數。十進位制與二進位制相比,十進位制的數字長度更短,更容易辨識書寫,另一方面十進位制的應用需要掌握比二進位制應用更復雜的加法表與乘法表。

二進位制的發明追溯至萊布尼茨。萊布尼茨對二進位制情有獨鍾,用法國數學家、物理學家拉普拉斯(Laplace,1749。3-1827。3)的話說:“萊布尼茨在他的二進位算數中看到了宇宙創始的原象。他想象1表示上帝,0表示虛無。上帝從虛無中創造出所有實物,恰如在他的數學系統中用1和0表示了。。。”。這倒是暗合了二進位制在現代神奇的應用之旅。二進位制的基礎符號0、1,正好可對應邏輯真值的假、真表示,在“邏輯與語法”一節,布林代數中的與、或、非運算是透過真值表定義,抽象地看,二進位制個位上加法運算可以看作與布林代數同系列的運算,只是運算元不一樣且有進位問題。

0、1與現代電子技術裡的電路與電子器件的特性相匹配。1、0可正好對應電路的開與關,電脈衝的有與無,電平的高與低,利用這一特性,技術上可由繼電器實現與門、或門、非門的數字邏輯電路,實現布林代數運算。利用異或門的數位電路可以模擬出二進位制的加法運算,理論上減法是加法的逆運算,乘法運算是連加運算,除法是乘法的逆運算,技術上透過補碼等方法,可以將四則運算都歸為加法運算。

人類神經系統是神經元(神經細胞)透過突觸相互連線成的神經網路,單個神經元與突觸工作機制也符合二進位制的方式:輸入一個訊號,神經元或者啟用,或者抵制;啟用的神經元或者透過突觸向連線臨近神經元輸出一個訊號,或者不輸出。這是一個刺激人工智慧研究的描述,這樣概括神經元與突觸的工作,是否漏了其它的要點,是否能支援起神經網路整體複雜性的解釋,下不了肯定的結論。

6.4二進位制的應用-現代計算機

二進位制的二個基礎符號:0、1,形成了一個基礎的對立,利用這一對立以及線性空間理論上不受限制的位數,我們可以對任意資訊用二進位制來編碼,比如英文的26個字母或中文的每個字都可以透過ASCII (American Standard Code for Information Interchange)碼或Unicode碼與一個8位或16位的二進數對應,從而每一英文單詞,或中文詞對應一個二進位制的編碼。這些資訊的二進位制編碼,也稱為內碼,同樣可以由電子器件物理地實現,存放於計算機的儲存器

現代計算機由儲存器、運算器、控制器、輸入裝置和輸出裝置5部分組成,構成下圖的結構:

6.4二進位制的應用-現代計算機

這個系統經常稱為馮·諾依曼系統((Von Neuman,1903。12-1957。2,美籍匈牙利數學家)。系統實現的是“儲存程式計算機”的思想:

將程式與資料預先輸入存放在儲存器

控制器從儲存器裡逐條取出程式,解析後送入運算器執行

這裡的程式是一個指令集,每一條指令可分為二個部分

· 操作碼

· 運算元地址碼

操作碼就是對應計算機的基本操作,主要就是運算器的運算操作,運算元的地址碼是儲存器的一個地址,對應地址裡存放有操作碼要操作的數。操作碼、運算元地址、地址裡運算元,所有這些最終是以二進位制形式告知計算機,再譯成對應的電訊號,驅動硬體執行。

運算器又稱算術邏輯單元ALU(Arithmetic Logic Unit),原理上就是前面所說繼電器的數字邏輯電路發展來的,所完成的就是算術四則運算與邏輯運算,配套上還有移位、比較與傳輸操作,以及更多技術實現上的細節。今天計算機的應用遍及各行各業,所處理的問題也越來越複雜,很多領域的程式複雜度與可靠性是人類難以預測與控制的,所有這些應用中計算機主要做的處理最後都是編譯為算術邏輯單元的邏輯、數學計算。

可儲存執行不同的程式,處理不同的問題,體現的是通用圖靈機的概念。實現通用圖靈機還要滿足圖靈完備的要求,簡單地說就是要支援分支與迴圈的流程處理以及具備足夠的記憶體。

我們之前說的都是符號,現在說到的是物理的過程與狀態,這是由人設計實現的。設計實現這些物理過程與狀態,起源是對符號操作過程與結果的一種模仿與表現。你也可以把這看作是一種語言形式,符號是繼電器、句型是閘電路,語句則是電脈衝經過閘電路過程。相對的,原來的語言符號也只是另一種人造的物理過程與狀態,二者區別在於:後者是面向人的理解與操作的,前者是面向機器自動操作,由此細節上二者有更多的不同。如果一個符號表達及其演算過程,可以反映實際的物理的現象A,也可以反映實際的物理過程B,那麼我們也可以利用B的過程來模擬A,忽略可能的誤差,這與符號的過程等價。甚至沒有符號與演算可以用來表現,能確定A與B過程的相似,就可以用B來表現A,實際的例子如風洞。

繼電器、閘電路替換了更早的石子、繩結、木珠、繩網、算盤等,計算也從手動機械的操作進步為機器自動的操作,這是一個大的跨越。操作是機器自動執行的,要進行什麼操作還得人告訴計算機。機器本身只懂得二進位制,沒人願意輸入二進位制碼告訴計算機做什麼,這樣的工作太枯燥,於是人們發展了高階程式語言用來編寫程式。高階程式語言是更接近於自然語言,或接近領域原生的表示方式的程式語言,高階語言編寫的程式透過編譯器或直譯器的解析,翻譯為機器可執行的二進位制目的碼。程式語言是真實在用的人工語言,且數量眾多。高階語言的程式設計回到用一種人工語言符號來模擬機器物理過程,因此每一實用的高階語言也會要求滿足圖靈完備,即支援分支、迴圈的語句。各類計算機程式語言的通用語法採用的是巴斯克正規化(BNF正規化),BNF正規化等價喬姆斯基的第2型文法,即上下文無關文法,前面說過,這型語法對應的自動機就是圖靈機。

再來看編譯器的工作。編譯器所做的是分析程式語言編寫的程式,包括詞法、語法的分析,語義的分析(這是常見的說法,是否正確先忽略),其中所用的方法很多與自然語言分析中所用的方法類似。比如將語句分析為語法樹,分析基於給定的文法:G=(N,∑,P,S),從結果來看:語法樹的每一葉子節點對應了終結符集中的一個,每一中間節點對應了非終結符集中的一個,中間節點到中間節點或葉子節點會對應一個產生式規則。編譯器完成分析後,經過最佳化後生成目的碼。在這些領域的設計工作,喬姆斯基的形式文法是基礎的理論與工具,並有著良好的應用效果,相比較,它們在自然語言的應用沒有太多的進展。

(作者(LQS)注:連續地閱讀會發現,系列的文章不是對各個問題的解釋,而是新的理解視角)

·