這篇文章是參加本文是參加六角學院主辦的鼠年全馬鐵人挑戰
我想要寫一些一般人也可以讀懂科技文,或者一些我自己正在學習的東西。
第一篇的主題,電腦為什麼可以算數,這個問題對我這種非本科學寫程式的人來說意義重大,我感覺這是一個很資工系的人會要知道的基礎知識,同時也是我想繼續進步就應該要跟上的知識。
我不知道我會走到哪裡,但我很期待。
希望各位可以喜歡,而且也希望同樣本來沒有基礎的朋友可以看懂,那我就成功了。
現在大家生活中或多或少都會用到電腦,相信大家一定知道,電腦的英文叫做「computer」,也就是「計算機」的意思,嚴格說起來,電腦就是用電路,非常快速的完成很多運算的機器。但是,電路到底怎麼成為一個可以算數的東西的呢?今天這一篇文章,就是要說明為什麼用電可以運算,它背後的原理是什麼。
要理解電腦為何可以運算,我們有幾個問題要解決:
首先,在最一開始,運用「電」來進行運算,有一個非常著名的著名的案例:在 1890 年的美國,當時人口快速增長,速度已經到完成一個年度的人口普查人口就需要花上好幾年。但這樣,就沒有人口普查的意義了,為了這個問題,政府十分煩惱。
為了進行人口普查,當時的人們設計了之後設計一台機器,這個機器有一排帶電的探針,探針的下方有著水銀杯,連接著一個刻度儀器。另外,他們還設計了一張表,上面羅列了人口普查需要的問題,像是年齡、性別、婚姻狀況、居住地區等等。當這個人符合欄位描述時,就會在相應的位置打個洞。
在搜集完所有資料後,只要一張一張把表格放入前面說的有帶電探針的機器,每一次探針遇到有洞的欄位時,探針就會往下接觸到水銀杯,電流就會通到刻度儀器上,這一個儀器便會加 1。就這樣,人口普查的計算時間被大幅縮短,短短幾個月就完成了,為用電計算打響名號。
雖然很有名,但這個儀器原則上還不能算是電腦,他只是一個計算工具,不能存數據,也沒有辦法自己保留計算程序,只能算是一個「用電計算」的重要里程碑。
雖然前面電腦已經可以進行計算了,但當時就只有 +1 的功能,表示數這件事情還是要放到刻度儀上進行,為了讓電腦自己就可以表示數,當時的人進行了非常多嘗試,像是改變電壓、改變電位等等。在經過許多電流創造出多種不同狀態的嘗試之後,最終發現最穩定的做法,就是單純的使用 0 和 1 ,也就是 true 和 false 這兩種狀態來表示表示。
那麼下一個問題就是,數學上,如果只有 0 和 1 兩種數字,我們要怎麼表示數呢?
想像在一個只有 0 和 1 兩個符號的世界裡面,在一無所有的狀況下,事情很簡單,就是 0。接著,當我們有了第一個物件,假設是一個巴斯,那這個數的表示就是 1。接著,當我們又多了一個巴斯,此時因為我們在的世界裡沒有 2 以上的數,這時,我們就只好進位,把數表示成 10,此時再多一個巴斯,因為最右邊的位數還有空間可以加一,所以數的表示就會變成 11。這樣可以想像如果再多一個巴斯時,就會因為現在有的位,都已經把數字用完了,得要再進位,因此 4 就會表示成 100。像這樣子每兩個巴斯就進一個位數的表示方式,就叫做二進制。
電腦中因為前面說的工藝上的實踐,使表示 0 或者 1 兩種狀態比起表示三種或以上狀態要簡單得多,一開始的工程師們就決定使用二進制來進行運算,並讓 0 代表 false,1 代表 true。
知道了有二進制這種表示數的方法,也知道可以用電來展現出二進制,接下來的問題就會是,二進制具體到底怎麼運算的。要回答這個問題,就要看到早在電腦發明的將近一百年前,一個叫做 George Boole 提出的邏輯運算。
在 1854 年,英國科學家 Boole 提出了一個邏輯運算法則,這個法則有三個最基本的邏輯「且(AND)」、「或(OR)」和「非(NOT)」,它們的運算是這樣的:
AND:當 A 和 B 兩個皆為 true 時,結果才會是 true。
OR:A 和 B 兩其中,只要有一者為 true 時,結果就會是 true
NOT:當輸入為 true 時,輸出為 false;反之,輸入為 false 時,輸出為 true
我們再把上面這幾個邏輯稍微組合之後,可以產生 XOR 這個邏輯:
XOR(異或):當 A 和 B 相異時,輸出 ture,否則輸出 false
接著我們看一下二進制的運算,假設我們有一個數 0011 和另一個數 0101 相加,會長這個樣子:
這個時候,本位上發生的事情,是 1 + 1 變成 0
如果我們多做幾種運算,就會得到以下的結果:
觀察一下這個結果,可以發現當 A 和 B 相同時,答案就會是 0;而當 A 和 B 相異時,答案就會是 1。相同時為 0,相異時為 1,這個結果不就和前面在說 XOR 這種邏輯是一樣的嗎。
XOR(異或):當 A 和 B 相異時,輸出 ture,否則輸出 false
接著我們來看一下進位上的值的組合:
在這裡,1 + 1 會得到 1 進位,
我們同樣再做幾種組合,會得到下面的表:
這個時候,只有 A 和 B 都是 1 的時候,才會得到 1,也就是說,只有在 A 和 B 都是 True 的時候,結果才會是 True ,這個結果就和我們前面說得 AND 邏輯的結果一模一樣。
AND:當 A 和 B 兩個皆為 true 時,結果才會是 true。
在前面,我們已經知道在二進制之下,我們可以用邏輯運算,來完成加法運算。這也就是說,如果我們可以組合電路,創造出接收兩個輸入值後,會回傳 XOR 結果的電路,我們就可以進行二進制本位的計算;而如果我們可以再創造一個會回傳 AND 結果的電路,我們就可以做進位的運算。可以計算本位,也可以計算進位之後,只要把電路在通通接在一起,我們就可以完成二進制的加法運算了。
實際上如何用電路完成這幾個邏輯運算有點複雜,所以一般我們會把這些電路再抽象化(Abstruction),變成一些稱為「邏輯閘(Logic Gate)」的組件,所以可以完成剛剛介紹的 AND 的電路,就被稱為 AND gate、可以完成 OR 運算的,就稱為 OR Gate,而可以完成 NOT 運算的,就會是 NOT gate。
其他還有 XOR Gate、NOR Gate、NAND Gate 等等,當要進行複雜的運算時,就把這些邏輯閘組合再一起,就可以完成運算了。
到這裡,電腦就可以用 0 和 1 表示數,然後也可以算數了。
希望今天的文章有讓大家對於電腦是如何進行運算的有進一步了解,也希望大家看得開心~
我會在 2020 年每一週都發表一篇文章,所以如果你喜歡這篇文章,歡迎下週再到這裏或者我的部落格看看有沒有新文章,部落格應該會優先更新。
也歡迎留言,或各種指教,讓我更有動力繼續寫文喔!