歡迎關(guān)注我的專欄( つ??ω??)つ【人工智能通識】
更多相關(guān)文章請點擊如何從零開始制造計算機?
繼續(xù)前面的文章【科普】邏輯門電路-2
二進制Binary
很多人說計算機中的二進制起源于中國古典的陰陽八卦旭愧,這話不對寥殖,也對。
最早正式提出二進制的是生活在300多年前17世紀的德國數(shù)學(xué)家萊布尼茨Gottfried Wilhelm Leibniz呛牲,不是中國人刮萌。
在1703年,萊布尼茨發(fā)表了文章《論只使用符號0和1的二進制算術(shù)娘扩,兼論其用途及它賦予伏羲所使用的古老圖形的意義》着茸,正式提出二進制表示方法。
伏羲就是中國古典神話人物琐旁,補天女媧的老公涮阔。《易·系辭上》說:“河出圖灰殴,洛出書敬特,圣人則之∥眨”這里的圣人就是伏羲伟阔,說有一日,天馬載著河圖從天而降掰伸,神龜背著洛書從河中浮起皱炉,伏羲觀后靈感大發(fā),從中總結(jié)出八卦陰陽圖文碱工。這里的河圖我猜就是河流的彎曲走向娃承,洛書就是龜甲紋樣。
從圖中我們也可以看出怕篷,八卦是用八個符號表示八個方向历筝。每個符號很有意思,都是三橫組成廊谓,有的橫中間斷開梳猪,有的不斷。
我們把連續(xù)的橫線視為1,斷開的視為0春弥,那么這八卦就是乾111呛哟、坎010、艮100匿沛、震001扫责、巽110、離101逃呼、坤000鳖孤、兌011。就是0~8數(shù)字抡笼。
二進制歷史
1854年苏揣,英國數(shù)學(xué)家喬治·布爾George Boole發(fā)表了一篇里程碑式的論文,其中詳細介紹了一種代數(shù)化的邏輯系統(tǒng)推姻,后人稱之為布爾代數(shù)平匈。他提出的邏輯演算在后來的電子電路設(shè)計中起基礎(chǔ)性作用。而我們現(xiàn)在編程里面的布爾值就是來自與此藏古。
1937年增炭,克勞德·香農(nóng)Claude Elwood Shannon在麻省理工大學(xué)完成了其電氣工程碩士學(xué)位論文,用繼電器和開關(guān)實現(xiàn)了布爾代數(shù)和二進制算術(shù)運算校翔。論文題為《繼電器與開關(guān)電路的符號分析》(A Symbolic Analysis of Relay and Switching Circuits)弟跑,其中香農(nóng)的理論奠定了數(shù)字電路的理論基礎(chǔ),這篇論文被稱為“可能是本世紀最重要防症、最著名的碩士學(xué)位論文”孟辑。
1937年11月,任職于貝爾實驗室的喬治·斯蒂比茲發(fā)明了用繼電器表示二進制的設(shè)備蔫敲,它是第一臺二進制電子計算機饲嗽。至于圖靈和馮諾依曼那其實也是后話了。
二進制運算
二進制轉(zhuǎn)為十進制很簡單:
就是說奈嘿,二進制最右邊一位代表1貌虾,右數(shù)第二位代表2,第三位代表4裙犹,第4位代表8...依次類推尽狠。幾個例子如下:
- 010=0+2+0=2
- 011=0+2+1=3
- 1011=8+0+2+1=11
換做加法就是:
- 3+1=4 用二進制就是 011+001=100
- 2+11=13 二進制就是 0010+1011=1101,這里1101等于8+4+0+1
在編程語言中還有針對二進制的各種運算,在Python中對二進制數(shù)字來說可以進行各種按位運算叶圃,比如與運算符&袄膏,或運算符|,非運算符~掺冠,異或運算符^沉馆。
注意這里沒有用~非運算符,因為在Python里它和我們想的不一樣,而用0b1111減去a則可以得到期望的結(jié)果斥黑,這里b后面4個1是因為a也是4個數(shù)字的揖盘;后面異或^的結(jié)果省略了開頭的0,完整的是0b0110锌奴,和我們期望的一致兽狭。
兩位數(shù)加法器
回顧一下半加器電路:
這個電路,輸如A和B缨叫,異或門輸出的S就是本位的結(jié)果椭符,與門輸出的C就是進一位(左邊一位)的結(jié)果。比如:
- A=0耻姥,B=1,那么有咨,S=異或(0,1)=1琐簇,C=與(0,1)=0,結(jié)果是01即1
- A=1座享,B=1婉商,那么,S=異或(1,1)=0渣叛,C=與(1,1)=1丈秩,結(jié)果是10即2
怎么擴展到兩位數(shù)加法器?
這里的二進制運算格式是
比如下圖顯示了即
的情況:
在這里的順序是:
- A1B1相加通過X1得到末尾C1的值淳衙。
- A1B1相加之后通過D1向第二位C2進位蘑秽,而A2B2相加也應(yīng)該是第二位C2,所以這兩個結(jié)果也要走X25進行相加箫攀。
- 如果X25這次相加還會產(chǎn)生進位就通過D25輸出到第三位C3肠牲。
- D25是輸出到第三位C3的,而A2B2相加的進位也是在第三位C3的靴跛,所以它們也要通過X35相加缀雳。
- 如果X35相加之后還會進位,就輸出給D35梢睛。
實際上X35這次相加是不會產(chǎn)生進位的肥印,也就是說D35一定輸出是0。為什么绝葡?簡單說就是兩個兩位數(shù)相加不會得到一個四位數(shù)深碱,這和99+99不可能得到1000一樣。但從邏輯上可以這樣看懂:
- 如果進位D2輸出1挤牛,那么A2B2一定都是1
- 如果A2B2都是1莹痢,那么異或操作的X2一定輸出0
- 如果X2輸出0,而X2又是與運算D25的輸入分支,所以D25一定輸出0
- 如果D25輸出0竞膳,它又是X35的分支航瞭,也是D35的分支,所以D35一定輸出0
更多位數(shù)的加法器
從上面的兩位數(shù)加法器我們可以知道坦辟,這個模式其實是可以無限擴展下去的刊侯。
首先我們簡化一下圖形:
下面是簡化符號之后的四位數(shù)加法器:
在這里有幾處使用異或邏輯代替了半加器,因為上面已經(jīng)討論到在某些情況下半加器不可能產(chǎn)生進位锉走。
如果把這些半加器都展開滨彻,那么這個電路已經(jīng)看起來比較復(fù)雜了,而我們?nèi)粘J褂玫氖謾C電腦芯片中都有數(shù)億個晶體管互相連接而且不停地通斷才實現(xiàn)了各種的功能挪蹭。
歡迎關(guān)注我的專欄( つ??ω??)つ【人工智能通識】
更多相關(guān)文章請點擊如何從零開始制造計算機亭饵?
每個人的智能新時代
如果您發(fā)現(xiàn)文章錯誤,請不吝留言指正梁厉;
如果您覺得有用辜羊,請點喜歡;
如果您覺得很有用词顾,歡迎轉(zhuǎn)載~
END