大家的C語言-100-計算機是如何工作的

爲什麼要介紹計算機是如何工作的

C語言是一種與計算機底層較爲緊密的語言。因此在學習C語言之前必須理解透計算機底層,這樣才能理解如指針這樣的概念,學習起來就會事半功倍。

很多C語言教程之前也會介紹計算機的工作原理,但是又介紹的不夠透徹。也使讀者在理解C語言上存在困難。因此我將盡力把計算機工作原理中對理解C語言有用的部分給大家講清楚。

計算機科學誕生於國外,所以很多資料都是從外文翻譯過來的,翻譯過程中一些概念模糊不清。如process和procedure都翻譯成程序,source code 和 code 都翻譯成代碼。由於概念不清導致讀者在學習時感到困惑。所以我想通過本部分,讓讀者清晰地理解本教程中的一些概念。如:指令、數據、內存地址、翻譯器、操作系統、源代碼文件、可執行文件、程序等。

簡單的電路

下面是一個最簡單的電路,由一個小燈泡、一個電源和兩根導線組成。只要電源能提供能使小燈泡發亮的電流,小燈泡就會一直髮光,如論是白天還是晚上。

這帶來了一個問題,如果我現在不需要小燈泡發光、但又不想破壞電路,以便在需要燈光時迅速地讓小燈泡再次發光該如何做呢?

答案是加個開關就可以了。加入開關後除了能控制小燈泡外,我們還可以通過電路來表示數字了。可以這樣規定開關閉合小燈泡亮時表示1,開關斷開小燈泡滅時表示0。但這個電路只能表示兩個數0和1。如果要表示更大的數需要增加燈泡的數量。

又接了兩個燈泡後,三個燈泡就可以表示三位數了,因爲每位可以表示兩個數,因此可以一共表示8個數:000、001、010、011、100、101、110、111。

二進制數

上面的數字與我們平時使用的十進制數不太一樣,我們需要把兩者對應起來,如下表:

電路能表示數字 十進制
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

 

 

 

 

 

 

 

 

 

由上表可以看出由於電路能表示的數字每位最大能表示1,因此超過1就需要向前進一位。這與十進制數每位超過9,需要向前進一位的道理是一致的。每位能表示十個數的數字叫做十進制數,那麼每位能表示兩個數的數字就叫做二進制數。很多教程還介紹了二進制和十進制之間的如何轉換。但是我覺得到目前爲止還沒有必要掌握這項技能,因爲在實際工作中根本用不上。十進制數和二進制數之間的轉換工作翻譯器會幫你完成,而實際工作中用到的更多的是十六進制數。關於十六進制我會在之後爲大家介紹,目前大家只要理解什麼是二進制數就可以了。

計算器

這部分內容,與上部分內容之間存在一定的跳躍性,但要講清楚需要很長的篇幅(都可以另起一個教程了),並且內容與學習C語言關係不大,因此直接略過。如果向深入理解,給同學推薦兩本書。一本是國內的《穿越計算機的迷霧》,一本是國外的《CODE》。兩本數都非常優秀,建議如果英語比較好,可以直接讀《CODE》的英文原版,因爲可以同時學習一些計算機相關的英文表達。如果英語不好可以選《穿越計算機的迷霧》。不建議選翻譯後的《CODE》,一般在有選擇的情況下我都不建議讀翻譯或編著的書,因爲通常譯者和編者通常都不理解書的內容,導致書的內容很混亂。

雖然存在跳躍性,但是不要慌張,跳過那部分內容不會給理解C語言帶來任何問題。同學們只要知道電路可以會被設計的無比複雜,以至於我們可以用開關來控制它做數學運算。

如上圖,中間的計算機就是一個無比複雜的電路。它有6個開關。其中三個屬於控制端,控制端用來控制電路的功能和狀態。另外三個屬於輸入端,輸入端用來向電路輸入運算時需要的數據。計算器內部有一個寄存器,可以理解爲三個電容。每個電容充滿電荷表示1,釋放完電荷表示0,因此存儲三位二進制數。輸出端可以理解爲三根導線,導線上有電壓時表示1,無電壓時表示0。

控制端有三個開關,可以表示8個數。本例中只使用其中地4個,如下表:

作用
000 使計算器的輸出端,寄存器都爲000
001

輸出端保持不變,將輸入端的數保存到寄存器中

010 保持輸出端和寄存器不變
011 計算輸入端與寄存器的和,結果輸出到輸出端

這樣我們就可以利用這個電路進行數學運算了。下面說明一下該電路如何計算2+1。

  1. 控制端設置成000,此時寄存器和輸出端都是000。
  2. 輸入端設置成010(十進制數的2,也就是被加數)。此時寄存器和輸出端都是000
  3. 控制端設置成001。此時寄存器爲010(保存了輸入端的值)。輸出端爲000。
  4. 控制端設置成010。此時寄存器和輸出端的值無變化。‘
  5. 輸入端設置成001(十進制數的1,也就是加數)。由於控制端是010所以此步輸出端和輸入端的值也無變化
  6. 控制端設置成011。此時輸出端的值爲010+001 = 011。也就是十進制數3。

這裏明確兩個概念 數據指令。由控制端的數是用來控制計算器如何工作的,因此將控制端的數稱爲指令。而輸入端的數是用作運算的,因此稱爲數據。由此可知無論是指令還是數據,實質上都是數,只是使用方式不同而已。

通過以上介紹相信同學們已經對計算機是如何工作的,有了一個感性的認知。然而計算2+1等於3的問題,使用計算機需要六步才能完成,還不如我們自己算的快,而且還得保證按順序設置開關的狀態,一步做錯會就會導致不可預料的結果。但勤能補拙,下一篇我會介紹一下如何提高計算器的工作效率。以及CPU、內存、程序、代碼的概念。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章