電腦裡面就是一堆 1 和 0 相互交疊才能運作~
(……1 和 0 相互交疊
)
廢話不多說,我們先來介紹所謂的 1 跟 0 。
其實在電腦的零件裡面,因為它只是一堆電路集結成的東西,
所以電腦不懂什麼叫做「123」,更看不懂什麼叫做「ABC」,
在電路板的眼中,只有「高電壓」與「低電壓」的差別——
因此,那些發明電腦的人就在想了,如何用這高低電壓來表示東西呢?
假設今天電路板某處的電壓高低的順序是是「高低低高高高低高」
你可能會想說:「What the fuck?」
看似沒用,但它是可以用來表示東西的哦
像這個順序我們就可以一個一個對應下來,
翻成:10011101——這串1和0又可以代表什麼?
面對這個問題,那群開發電腦的科學家就提出了「二進位」的概念
譬如一般來說,我們在數東西是這樣的:
0→1→2→3→4→5
→6→7→8→9→10
因為最左邊那一位數滿第十個的時候就會多一位,所以我們叫作「十進位」
那二進位呢?
既然是二進位,當然就只能用0和1來表示數字了,滿兩個就進一個位:
0→1→10→11→100→101
→110→111→1000→1001→1010
對應到後面就可以知道,這個10011101轉換成十進位
就是我們平常人用的數字系統的「157」
(註:避免文章失焦,不贅述十進位與二進位的轉換)
所以在電腦裡面表示數字的方法就這麼誕生了
光是表示數字有用嗎?當然沒有用呀!
電腦有太多太多的事情要做,就拿最簡單的來說,譬如:
1. 電腦要隨時檢查你是不是按了 Alt 鍵
我們單單講這個情況好了,
「按了 Alt 鍵」、「沒按 Alt 鍵」這兩個不同的狀態要如何表示呢?
聰明的科學家利用了只有 0 和 1 的特性,弄成這兩個情況:
按 → 把 1 存到記憶體裡面
沒按 → 把 0 存到記憶體裡面
像這樣用 1 和 0 表示的概念,我們叫做「布林代數」,
這個 1(有、成立) 我們在布林代數裡面稱作「True(真)」
反過來說, 0 (沒有、不成立)我們在布林代數裡面稱作「False(假)」
我們就成功做到判斷「對與錯」的目的了。
-
但它還是很忙。假設有三個情況:
1. 電腦要隨時檢查你是不是按了 Alt 鍵
2. 電腦要隨時檢查你是不是按了 F4 鍵
3. 電腦要隨時檢查你是不是同時按了 Alt 和 F4 這兩顆鍵
若我們今天要的是上述的第三種情況,又該怎麼辦?
我告訴你,科學家還是很聰明的。
所以他們又做了一個東西叫做「邏輯閘」來判斷這些情況。
一般來說,邏輯閘被分為七種,
分別叫做 NOT 、 OR 、 AND 、 NAND 、 NOR 、 XOR 、 XNOR
就拿其中一個最簡單的 AND 來說好了,這個閘一次接收兩個信號,
(註:這個AND跟英文的and是一樣的意思,就是「而且」,兩個東西都成立的時候就OK)
如果今天收到的其中一個是 1 、另外一個是 0,那它最後就輸出 0
(因為這樣表示「沒有兩個條件一起達成」,所以不成立)
那如果兩個都是1的情況下,就輸出1:
(因為這就是"A達成且B達成",所以成立)
順帶一提,習慣上常常表示:
0 AND 0 = 0
0 AND 1 = 0
1 AND 0 = 0
1 AND 1 = 1
像這樣會有不同的輸出結果,就是"AND"邏輯閘的運作。
如果有認真看文章,
這裡可能會有人問,「為什麼 0 AND 0 不會是 1 呢?兩個不是都一樣嗎?」
其實要解釋它是很簡單的,但這裡就必須先問你:
「你的身高超過970公分 而且 你的體重超過800公斤」成立嗎?
我們一個一個看下去吧:
「你的身高超過970公分」是錯的。
「你的體重超過800公斤」是錯的。
如果是這樣,
難道「你的身高超過970公分 而且 你的體重超過800公斤」就會是對的嗎?
那我想你應該明白了。
除此之外,邏輯閘最常應用在程式設計上,
我們常常會看到一段程式碼裡面寫著:
if ( A AND B ) { XXXXX; }
它在電腦裡面執行上面所謂「XXXXX」的先決條件,
就是括號裡面的東西要「成立」(也就是上面寫的 A AND B 要輸出 True )
像這種情況也可以用我們所謂的邏輯閘來解釋,
於是程式的語法就變得更接近人類語言了。
如此一來,
邏輯閘就在這種場合大大發揮了它的功能——讓電腦用人類的邏輯去判斷正確或錯誤。
後來隨著不斷進步及發展,眾人透過他們的智慧,
把這七個邏輯閘用不同的方式組合起來,發揮了更多強大的功能。