計算機中的計算
我們都知道計算機由軟件和硬件組成。而真正參與運算的核心硬件是處理器宪哩,即CPU。簡單來說第晰,CPU實際上就是一堆復(fù)雜的邏輯電路組成斋射。那什么是邏輯,什么又是電路但荤,什么又是邏輯電路呢?
邏輯電路
邏輯一詞來自于古希臘涧至,有一門專門研究邏輯的學(xué)科稱為邏輯學(xué)腹躁。在這里,我們對邏輯可以簡單理解為數(shù)學(xué)上的邏輯南蓬,即表示當(dāng)一定的條件成立時纺非,某個命題的真與假。在邏輯運算中赘方,最基本的3種運算是與烧颖、或、非窄陡。大家在高中數(shù)學(xué)中已經(jīng)學(xué)過了所謂的或且非真值表炕淮,且也就是我們所謂的與運算。
那電路呢跳夭?通常電子部件組成的導(dǎo)電回路涂圆,稱為電路。而在數(shù)字電路中币叹,只取0和1润歉,0代表低電平,1代表高電平颈抚。數(shù)字的1和0對應(yīng)了邏輯上的真與假踩衩,因此這種電路叫做邏輯電路。
大的電路也都是由小的電路模塊組成,因此在CPU中需要設(shè)計很多基礎(chǔ)的邏輯電路驱富,例如比較器锚赤、加法器、編碼器等等
比較器
比較器的輸入是A萌朱、B的兩個32位的二進制數(shù)宴树,粗箭頭表示多根線,細線代表一根線晶疼,每根線的電平為高或者低酒贬,代表1或0。A和B各代表32根線翠霍,每一根線代表1位锭吨。輸出則有3根線,如果A>B寒匙,則第1根線呈高電平零如,其余兩根線呈低電平,如果A=B锄弱,則第2根線呈高電平考蕾,其余兩根線呈低電平,如果A<B会宪,則第3根線呈高電平肖卧,其余兩根線呈低電平
編程中的if、else語句就會用到比較器:
加法器
加法器是數(shù)字電路中最重要的模塊掸鹅,它是所有運算的基礎(chǔ)塞帐。實際上加、減巍沙、乘葵姥、除四則運算都可以使用加法器實現(xiàn)。在數(shù)學(xué)中句携,減法是加法的逆運算榔幸,除法是乘法的逆運算。例如加法是a+b矮嫉,則減法可寫為a+(-b)牡辽,乘法是a*b,則除法為a*(1/b)敞临,另外态辛,a*b又可解釋為有b個a相加,a+a+a+...挺尿,因此僅使用一個加法器就可以構(gòu)建出加奏黑、減炊邦、乘、除四種運算熟史,而這樣做可以降低CPU設(shè)計的復(fù)雜度馁害。
編碼器
當(dāng)我們在鍵盤上敲一個鍵時,計算機怎么知道我們敲的是哪個鍵呢蹂匹?
實際上是因為每個鍵都連到一個編碼器上碘菜,假如按了數(shù)字3這個鍵,相應(yīng)的連線變成高電平限寞,編碼器就輸出這個鍵的編碼忍啸。如果有16個按鍵,那么輸出可以用4根線表示履植,按鍵0用0000表示计雌,按鍵1用0001表示……計算機只需根據(jù)編碼器輸出的編碼就知道了我們按的是什么鍵,從而進行相應(yīng)的處理玫霎。
解碼器
有了編碼器凿滤,那自然會有解碼器,不然怎么知道每個編碼代表什么意思呢庶近?解碼器將每個編碼解析之后輸出到顯示屏上面顯示出來翁脆。
二進制的運算:
加法
為了簡單,現(xiàn)在假設(shè)我們只有一個4位的加法器鼻种,則5 + 3的運算如下
將十進制數(shù)轉(zhuǎn)為二進制
將各個位上的數(shù)字相加鹃祖,滿二進位
再來算一下8 + 9的結(jié)果
可以看到,由于我們只有四位普舆,溢出的部分將被丟棄,黃色數(shù)字被丟棄校读,因此使用四位加法器計算8 + 9的結(jié)果是1
減法
有了加法沼侣,還需要算減法,那我們?nèi)绾尾拍苁褂眉臃ㄆ鱽碛嬎銣p法呢歉秫?要解決這個問題蛾洛,首先要引入補數(shù)的概念。
在日常生活中雁芙,時鐘的時針轉(zhuǎn)一圈為12小時轧膘,假如現(xiàn)在時鐘的時針指示到六點,想要它指向三點兔甘,我們可以按順時針方向?qū)⑺鼡芫鸥窕寻部梢阅鏁r針方向轉(zhuǎn)三格,結(jié)果是一致的洞焙。如果我們規(guī)定順時針方向為正蟆淀,逆時針方向為負拯啦,那么-3和9的效果是等價的,這時候就可以說-3和9是以12為模的補數(shù)熔任。
補數(shù)的一些概念:
一個正數(shù)和一個負數(shù)互為補數(shù)時褒链,兩數(shù)的絕對值之和稱為模
一個負數(shù)可用它的正補數(shù)來代替,而這個正補數(shù)可以用模加上負數(shù)本身來得到
正數(shù)的補數(shù)為其自身
我們知道4位二進制最多只能表示16個數(shù)字疑苔,這就像時鐘上一圈只能表示12個小時一樣甫匹,因此直觀的就能感知到4位二進制中互為補數(shù)的模一定是16。
有了補數(shù)的概念惦费,就可以將一個負數(shù)轉(zhuǎn)換為它的正補數(shù)兵迅,例如要計算8 - 3可以寫成8 + (-3),將-3轉(zhuǎn)為它的補數(shù)13趁餐,那么最后只需要計算8 + 13的值就可以計算出8 - 3的值喷兼,如果大家不信,我們就來算一算
將8和13的二進制相加后雷,結(jié)果為10101季惯,因為我們是四位處理器,結(jié)果溢出臀突,必須丟棄最高位的數(shù)字勉抓,最終結(jié)果為0101,它的十進制結(jié)果正好是5候学,怎么樣藕筋,神奇嗎?
引入負數(shù)
補數(shù)實際上是一種處理帶符號數(shù)的方法梳码,用于變換數(shù)字的符號隐圾。這在計算機中被稱為補碼。我們之前算補數(shù)掰茶,需要借助模暇藏,實際上在計算機中,求補碼有一套簡單的辦法濒蒋,口訣就是取反加一
例如求13的二進制補碼盐碱,那么就先將它的二進制取反,即對1101的每一位取反沪伙,我們前面說過瓮顽,1表示真,0表示假围橡,取反就是邏輯非運算暖混,對1取反自然就變成0了,所以取反后的二進制為0010翁授,然后對取反后的結(jié)果加上1儒恋,最終結(jié)果就是0011善绎,它的十進制就是3,正好與13互為補數(shù)诫尽。
計算機二進制補碼求法你學(xué)會了嗎禀酱?
咱們之前計算的都是正數(shù)的加減運算,有同學(xué)肯定會疑問了牧嫉,那如果引入負數(shù)會如何呢剂跟?
首先要明確一點,如果想表示負數(shù)酣藻,那肯定需要有一位來表示符號曹洽,因此4位二進制中,就只剩下三位有效位了辽剧,表示的正整數(shù)范圍肯定會變小了送淆。假設(shè)我們讓4位二進制的最高位表示符號位,0表示正數(shù)怕轿,1表示負數(shù)偷崩,那么正數(shù)的范圍只能是1~7,負數(shù)的范圍是-8~-1
在計算機中撞羽,負數(shù)的二進制使用它的補碼表示阐斜,而補碼的求法就是取反加一。例如-1的補碼就是1的二進制取反加一诀紊,當(dāng)有符號位時谒出,符號位是不參與取反的,因此就是001取反加一得111
好了邻奠,學(xué)了這么多概念笤喳,趕緊來計算一下4 - 6的結(jié)果吧