計算器計算出「1+1=2」的整個計算過程是怎樣的?為什麼能秒算?
想要完全理解這個問題,需要修一下數電。
計算器計算:1+1=2,實際上是用的是二進位,即:1+1=10
首先介紹三種最典型的邏輯電路:
1.與門 AND
其功能為噹噹且僅當輸入端均為1(高電平)時,輸出端才為1,反之為0,故真值表為:
2.或門 OR
其功能為噹噹且僅當輸入端均為0(低電平)時,輸出端才為0,反之為1,故真值表為:
3.非門 NOT
相比於與或門,非門只有一個輸入,而輸出為輸入端的反相,即高電平輸出則低電平輸入,反之亦然,其真值表為:
上述電路都可以用三極體來實現。
然後引入最簡單的【半加器】的概念,即只考慮兩個1位的二進位數相加,而不考慮進位問題。
令輸入為和那麼,很容易得到如下真值表
其中邏輯關係為:
我們會發現,只需要用到與門,非門,或門三種邏輯電路即可實現,如圖所示
至於全加器(考慮地位向高位idea進位)的一個典型電路如下圖所示,和為輸入,為進位,大家可以自行學習。
其邏輯關係為:
可以同樣使用與非或三種基本邏輯電路實現。
再進一步,將多個全加器串聯起來,一個4位加法器如圖所示:
輸出的為四位二進位數和的和,最大可以實現:
1111+1111=11110
轉換為二進位,即15+15=30
假設是8位的加法器,那麼這個最大計算範圍便會是:255+255=510
假設是16位的加法器,那麼這個最大計算範圍便會是: 65 535 + 65 535 =131 070
參考資料及部分圖片來源:【圖文】數字電路第4章(5加法器)_2_百度文庫
第一個問題
下面適合有初中物理的孩子。。。
要講幾個門電路
一,或門:
先說說這個圖,
開關e1 e2任意一個按下(任一個為1)或者兩個都按下(兩個都等於1)燈都會亮(等於1),是吧,我們把這個電路叫 或門。
抽象一下,如下圖:
他們都邏輯如下表
二:與門,
網上沒有找到開關圖,自己畫一個,
只有s1 s2同時按下(都為1)的時候,燈才會亮(為1)
抽象如下:
邏輯如下;
三:與非門
當s1 s2同時按下(等於1)的時候,Q才是和地線連通的(等於0),s1 s2任何一個斷開(任何一個等於0)的時候q都是高電平(等於1)。
這個叫 與非門
抽象一下,如下圖:
邏輯如下表:
然後我們有個電路圖如下:
就是把上面三個門都使用上的一個電路
我們叫 異或門
抽象如下圖表示:
邏輯表為:
對照前面三個門電路應該能理解把。。
然後現在大招來了,
再看這個圖:
就是一個異或門和一個與門組合,這個叫半加器,這就是一個可以算1+1=2的電路了,邏輯如下:
其中 A B為兩個加數,c是進位,s是結果。
也就是表示0+0=0進位為0
0+1=1進位為0
1+0=1進位為0
1+1=0進位為1,也就是十進位中的2.
為什麼叫半加器呢?因為它沒接受前一次加法的進位。
兩個半加器構成一個全加器。
很複雜是吧?但是也很有趣,不是么,詳細可以見編碼 (豆瓣)這本書講得特別詳細,小朋友都能看懂。至於第二個問題。。
一個cpu裡面有幾百萬幾千萬甚至上億個上面所畫的門電路,而cpu的運行數度為幾兆幾十兆赫茲,嗯,可以狹隘的理解為計算機每秒可以算幾兆幾十兆次這樣的加法吧,所以當然快咯。
【強答注意】
這樣可愛的問題,用一款教學軟體來回答特別合適(??ω??)?
首先當然是介紹一下軟體里的元件啦
====基礎元件====
【電線】
回答里將用到白色藍色兩種電線,你需要用它搭成所需電路的基本結構。
【開關】
顧名思義,它有兩種狀態,分別表示開和關。
(關上的開關)
(打開的開關)
【電路信號】
將電路信號鋪在電線上來表示接通電線。它也有兩種狀態,熄滅或激活,我們可以稱之為「0」和「1」。
(熄滅的電路)
(激活的電路)
【指示燈】
當它被連接到激活的電路時,會被點亮。用於使電路狀態更便於觀測。
(被點亮的指示燈)
【信號源】
它會使相連的電路保持激活狀態。但是當它被一條激活的電路指向時,它會熄滅。
【二極體】
它使電路信號只能單向通過。
(暫缺圖)
====「與」,「或」,「非」====
要使電路能夠完成一些複雜的演算法,當然不能只是接通0和1,還要能對他們進行一些運算。與或非這三個門就是門電路的基礎。
【非門】
非即是輸入與輸出相反,需要一個輸入端一個輸出端。
在學習軟體中我們可以用這個結構表示:
(右側開關輸入,左側輸出)
(右側開關開啟時的狀態)
可以看到,非門這種結構:
輸入0,輸出1。
輸入1,輸出0。
【或門】
或即是皆可,或門有兩個輸入端,一個輸出端。只要有任意一個輸入端被激活,輸出端便被激活。
我們用這種結構表示或門:
(下方為輸入端,上方輸出)
或門一共有4種狀態:
輸入0,0。輸出0。
輸入0,1。輸出1。
輸入1,0。輸出1。
輸入1,1。輸出1。
(或門的四種狀態)
【與門】
與門和或門同樣需要兩個輸入端,有一個輸出端。
我們這樣表示它:
(其實它是由三個非門與一個或門組成的)
它同樣也有四種狀態:
輸入0,0。輸出0。
輸入0,1。輸出0。
輸入1,0。輸出0。
輸入1,1。輸出1。
(與門的四種狀態)
====半加器====
用2進位表示的話,0是0,1是1,2是10。
我們想要1+1=2,其實可以理解為我們希望:
輸入1,1。得到10。
因為軟體中一個輸出端只能表示兩種狀態,所以我們更改一下,讓它有兩個有順序區分的輸出,稱為低位與進位。變成:
輸入1,1。得到1,0。
當然我們希望它在各個情況下都有正確的表達,所以是:
輸入0,0。輸出0,0。
輸入0,1。輸出0,1。
輸入1,0。輸出0,1。
輸入1,1。輸出1,0。
那麼我們就開始構造我們的加法器把(??ω??)?
答主注意到其中「輸入0,1。輸出0,1。輸入1,0。輸出0,1。」單看低位的輸出,很像是或門的結構。
那就先搭一個大大的或門吧!
然後只看進位的話,四種情況都很像與門。
那就接出一條與門吧(??ω??)?
(藍線接出的與門)
可是這時的計算並不正確,當輸入「0,0」,「0,1」與「1,0」時,它會正確地反饋「0,0」,「0,1」和「0,1」。
輸入「1,1」時,輸出會是「1,1」。
那就讓進位為1時,低位變成0唄!
於是在藍線後接一個非門,再與白線併入與門。這樣只要進位為1,經非門後的進位將阻止與門的激活。
最後再將藍線接出,作為最終的進位,第二次運算後的白線接出,作為最終的低位。
然後在四種輸入狀態下驗證:
雖然輸出端有點遠,但是仔細看的話,會發現在四種輸入狀態下,結果都是完全正確的!
那這個巨大的未優化的半加器就完成啦!
(??ω??)?
如果我們在這個基礎上,將低位與上一個半加器的進位進行一次加法(0+0或0+1或1+0或1+1),結果的進位再與自身的進位相加(0+0或0+1或1+0,不存在1+1),並導出進位。他就變成了一個可堆疊的全加器!
當然在結構上進行優化的話,可以讓它體積更小,更易堆疊。
(??ω??)?
大吉的解說是不完整的,甚至不是正確解說。邏輯門和邏輯開關之間,除了邏輯用語一樣之外,其實不是同一樣東西。
在大吉的答案中,電路中的燈泡點亮是因為電壓差,但成功利用電壓差作為輸入才是計算器的基礎和enabler.
計算器的出現於超級天才 約翰弗林明 所創造的真空三極體(還有左手定則)
這神奇的裝置是可以利用a埠輸入的電子量決定電路b和c之間的開閉。
這個三埠裝置的出現就像打開了潘多拉的盒子一樣,柵極的出現,容許了它在自身間的組合,把適當電壓的輸出接上柵極後實現了完全穩壓和組成不同的輸入和輸出組合。並以此組合成其他答主中所說到的全加器中的不同的邏輯門。
而為甚麼可以秒計,那是因為電子跳動的速度是由真空管的輸入電壓所決定的。但那速度很快,所以開閉速度也做得很快。如果不夠快就不斷加壓,加速電子在管中的飛行速度,可以達到最秒10000公里以上。
利用真空管組成的adder 是這個樣子的
雖說要受限於真空中的跳躍速度和電線中的漂移速度,但可以想像所有操作在電光火石間就完成了。
到今天真空管在邏輯上的用途已經被nmos pmos 和cmos等等取代了,它們的大小都可以少於百分一毫米,距離和檢測速度比起以前更快了,但用法和基本理念和真空管一樣。
這個你上了大學,學了計算機電路就知道了。計算器內部主要是通過異或門來實現加法運算的。
邏輯無非就這幾種:非門(NOT)、與門(AND)、或門(OR)、異或門(XOR),其中非門還可以和另外三個進行組合。加法主要是靠異或門實現的。
計算機內部為了計算方便,一律用二進位的形式表示數據,二進位是「逢二進一」的,只有 0 和 1 兩個數字。邏輯上一般把 0 稱為邏輯假,把 1 稱為邏輯真。計算機內部的加法也只有四條規則:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10(進位位 C 為 1,結果位為 0)
而這個規則正是使用異或門實現的。異或門(A XOR B)是指:只有 A 和 B 的狀態為一真一假時,才返回真。若 A 和 B 同時為真或者同時為假,則返回假。那麼你看看,上面的四條加法規則,是不是完全滿足異或門的定義?
對於進位位,我們都學過加法算式的豎式吧。類似於加法豎式,在進位位為 1 的數位上,是要再加上進位位的數的。計算機中的【加】,其實是邏輯異或。那麼問題來了,原先的兩個數,加上進位位,一共三個數,怎麼進行異或運算(A XOR B XOR C)?
我們知道,數學上的四則運算是有優先順序的,先乘除後加減。其實邏輯多項式運算上也同樣有優先順序,一般認為 NOT &> AND &> OR &> XOR。對於同級運算,其實可以使用結合律,即:A XOR B XOR C = ( A XOR B ) XOR C = A XOR ( B XOR C )。這樣是不是就可以理解了?
而且,多試幾次,你會發現一個規律:任意 n 個(n ≥ 2)邏輯量進行異或運算,若其中有奇數個邏輯真,則最終結果為邏輯真;若其中有偶數個邏輯真,則最終結果為邏輯假。
這樣,一個簡單的加法器就出來了。我們可以試試(假設是一個八位二進位的加法器),比如 23 + 44 = ?
23 的二進位為 00010111
44 的二進位為 00101100
運算的結果是二進位的 01000011,換算成十進位是 67,完全正確。
計算器的加法原理就這麼多,其餘的減法、乘法、除法什麼的也是在加法器的原理上進行改裝的,在這裡就不說太多了。
首先是詞法解析,把輸入算式壓棧入存儲。然後對數據按位操作,等同於門電路的那些與非或。這裡和普通cpu沒啥區別,一樣需要定址什麼的。只是需要自行查閱整數1和雙精度1.的區別。
其實題主如果問sin(2.2)/(1+3.)怎麼計算,為什麼那麼快是更恰當的。。。正常人基本沒法很快手算這個東西。。。
某些函數,比如sin,是查表加線性插值,也有的是Taylor展開,呵呵,glibc也是那麼做的。
對於更複雜的計算器,諸如TI系列提供的積分啊,自定義函數啊,其實和電腦的過程就蠻一致了。
必須要推薦一個遊戲!MHRD, 中文應該是「微硬研發」,內容是給玩家一個NAND與非門,一步步實現基礎邏輯門,BUS併線,半加器,全加器(沒錯,寫到這裡就會明白計算機是怎麼實現1+1的了!)……最後寫出一個CPU出來!
太中二了!計算機:從NAND到CPU到放棄!
Steam上只賣¥36哦!
http://store.steampowered.com/app/576030/
不是計算機計算出「1+1=2」——「1+1=2」是我們計算出來的。
我們只是設計了一個電路圖,你輸入某個訊號,這個電路板就會根據物理定律,輸出某個訊號。我們把輸入的訊號定義為(1,1),輸出的訊號定義為(2),計算結果就做出來了。
計算機是不思考的。電路板送出訊號是基於物理定律,就像水從高處流到低處。
是我們定義了訊號的定義。
是我們設計了電路板。
加法的電路板設計是可以有無限多種的,只是我們展示給你看的是最簡潔的一種。如果有需要,我們完全可以用幾百億個晶片設計出一個加法器。
我們甚至可以拿天地來做時鐘,讓天地「計算」出時間。
怎樣做呢?你抬頭看看太陽,太陽在頭頂,就是中午;太陽在東方升起,就是早上;太陽在西方降落,就是傍晚;太陽下山後,就是晚上;太陽走一圈就是24小時,走兩圈就是48小時。
電路板也一樣。我們知道許多電路方面的規律,我們按照設計圖,把組件拼湊在一起,製作出這樣的電路板,你在左邊輸入(a,b),右邊就會輸出(a+b)。所以就能拿來算東西了。
電路板是不思考/計算的。就像太陽中午的時候出現在頭頂,不是太陽思考/計算的結果。是我們給結果定義,是我們把太陽出現在頭頂的時間定義為「中午」,是我們把太陽轉一圈的時間定義為24小時,而不是太陽思考出自己多久該來到頭頂。
秒算這個詞是在侮辱計算機的運算能力。
《數字電路》《計算機組成原理》等
之前很多答主都回答了用二進位怎麼算,缺了2-10進位轉換解碼這步,好吧我也不打算回來,你自己查查怎麼做的吧。
總之其實基本都是真值表窮舉,然後轉成邏輯電路,其實這些都蠻簡單的,我學數電的時候覺得最精妙的是其實卡諾圖,你可以多看看,很有趣的。
問題比較抽象。
準確的說是一個機器,的某一部分狀態能夠代表數字。並且,有一個可行的過程,能夠表示兩個機器狀態的某種運算。
話說好像初中學二元方程時課本說過計算器的原理呢,我記得有。
——————步驟1.學習74ls283,4位超前進位加法器,當年數電考試里的冷門,從此記住它了。
步驟2.下載個計算器內部構成和演算法的pdf。
給你推薦一本書:穿越計算機的迷霧,,,好好看、就會懂
推薦《編碼的奧秘》
首先你要知道數字電路的本質,它的計算能力全部是由0和1這兩個數字賦予的。
其次,任何數字都可以用電壓的大小的組合(二進位)來表示(高電壓代表1,低電壓代表0,數字2可以用二進位數10表示)。
而二進位的加法運算也不難,0+0=0,0+1=1,1+0=1,1+1=0(鎖存器記錄進位)。
這個過程可以由數字邏輯電路辦到(坑有點大,詳細可以參見最高票回答)。
由此可以僅用高低電壓的脈衝變化來解決一個數學加法問題。
問題二,一般計算器的處理速度是以MHz為單位,Hz是每秒變化的次數,1M是1000000,即100萬,也就是說1MHz的運算速度一秒就會變化100萬次。
而一次加法運算才需要變化脈衝多少次……完全用不到一秒熱門回答的答案太長了。我覺得沒必要。不知道提問者是不是學理工科的,如果學理工科的,我建議重學電路吧,尤其是數電。你能問出這個問題,我覺得專業堪憂。
如果是學文科,商科的好奇寶寶,樓上那麼多熱心的人已經解答了,我想大學計算機基礎學過吧,原理和那個一樣的(? ̄? ??  ̄??)
1、計算過程是電路模擬,本質跟算盤是一樣的。巧妙的是計算機構造了完整的圖靈機:對變數與函數的完整輸入輸出。
2、為什麼能秒算?計算機的算盤:算珠是電子,手是電場,撥起算盤來當然接近光速。
我強烈推薦一本書《穿越計算機的迷霧》
其他人都從電路的角度去回答,我從計算機的角度回答一下這個問題吧。
現在的計算器其實在幾十年以前就和電腦一樣,都是複雜的集成電路組成。
警告:計算器(計算機)的東西如果展開來講都需要很嚴謹,我這裡只是做個類比,圖片來自網路,侵刪。
0. 計算器的組成
現代的計算器都五大基礎部件:控制器,運算器,存儲器(內存),輸入,輸出設備。控制器和運算器一起就是CPU,1+1=2的最終計算在這裡完成,存儲器就是存儲內容的,比如1+1=2 裡面的 第一個1 和 +號 以及第二個1 以及 2這個結果都分別存儲在內存裡面。輸入設備對於計算器來說就是一堆按鍵,輸出設備就是那塊液晶屏。
加上點源電路,存儲電路,輸入控制電路和液晶屏控制電路再加個外殼就組成了計算器!
圖中的輸出是6個7段數碼管
1. 計算器的計算過程
1.1 用戶開機通電,CPU複位初始化完成,CPU向液晶控制電路發出指令,顯示 「0」
1.2 用戶按下1後,輸入電路會向CPU發送一個信號(稱為CPU 中斷),這樣CPU就知道按鍵了,然後去掃描輸入電路的電平,發現是1 被按下了,然後將 1 儲存在 內存位置 0001 上存儲 1 這個數據。(每一個存儲位置都有固定的長度,存入的數據會轉換成二進位存儲,如果存入數據太長就會造成溢出,結果會不正確,計算器一般都會處理這個問題就是 顯示 E [ERROR])。
1.3 用戶按下+號,同理CPU會掃描到是加號按下了,這時候 CPU會將加號的代碼比如0 存入 內存位置 0002,各種計算符號在CPU內部都會有個編碼,比如+為1,-為2,* 為3 ,/ 為4 等等
1.4 用戶再按下 1,CPU又掃描到1 輸入,這個時候有個相對複雜的邏輯處理(下面講解),完成邏輯處理後,CPU 將這個 1 存入到了內存 0003 的位置。
1.5 用戶按下 = 號, CPU掃描到 = 號按下,然後去讀取 0002位置的計算符號,發現是1(加號),然後將 0001 和 0003 的內如讀取出來 用CPU內部的加法器加好後的結果 又存儲到 0001 去, 整個過程中,都會去讀0001的內容 顯示在 液晶屏上。
1.6 相對複雜的邏輯處理說明:CPU檢測到 運算符號的時候,需要先去判斷 0002的內容有沒有 比如原先是0(表示沒有),則直接將新的運算符號存進去,如果原先 有運算符號,則需要先完成上一個符合的計算,這個過程在計算器中的體現就是,我們可以不停的計算下去直到溢出出錯。
2. 為什麼這麼快
CPU的工作原理簡單的說就是不同的重複 上面這個步驟,等待中斷,掃描輸入,讀取內存,進行算術運算,存儲內存,控制輸出,而這些步驟在CPU內部都是根據指令執行的,這些指令就是傳說中的機器語言!
而CPU執行指令需要有幾個步驟(不同CPU不一樣,這裡做個類比):讀取指令,解析指令,執行指令。好了 CPU的執行步驟就不再展開了。
CPU是怎麼觸發去執行指令的呢,是有個時鐘發生器,通常是晶振觸發的,晶振有一個指標就是時鐘頻率比如 2.0GHZ,100MHZ 之類的,我們假設我們的計算器CPU是 1MHZ,那麼完成一次時鐘周期 需要的時間就是 1/1000=0.001秒。不同的CPU架構完成「讀取指令」,「解析指令」,「執行指令」的時鐘周期不一樣,假設我們的計算器 完成每個步驟都只需要一個時鐘周期,那我們完成一次加法運算(不同的邏輯運算時鐘周期也不一樣,這裡都認為一個時鐘周期完成)按照上面簡化的步驟只需要0.024秒就完成了,所以只有人按鍵的手速跟不上...
圖為晶振。以上拙見,歡迎指正
推薦閱讀:
※有哪些看起來很高端的技術其實原理很暴力很初級?
※你心目中的神級文明是什麼樣的?
※王小川在奇點大會演示的實時上屏技術是如何實現的?
※以色列的科技創新氛圍如何?為何會吸引很多互聯網巨頭?
※如果古代人有手機的話,世界歷史將會發生怎樣的改變?