計(jì)算機(jī)中的計(jì)算

計(jì)算機(jī)中的計(jì)算

我們都知道計(jì)算機(jī)由軟件和硬件組成。而真正參與運(yùn)算的核心硬件是處理器,即CPU。簡(jiǎn)單來(lái)說(shuō),CPU實(shí)際上就是一堆復(fù)雜的邏輯電路組成。那什么是邏輯,什么又是電路,什么又是邏輯電路呢?

邏輯電路

邏輯一詞來(lái)自于古希臘,有一門(mén)專門(mén)研究邏輯的學(xué)科稱為邏輯學(xué)。在這里,我們對(duì)邏輯可以簡(jiǎn)單理解為數(shù)學(xué)上的邏輯,即表示當(dāng)一定的條件成立時(shí),某個(gè)命題的真與假。在邏輯運(yùn)算中,最基本的3種運(yùn)算是與、或、非。大家在高中數(shù)學(xué)中已經(jīng)學(xué)過(guò)了所謂的或且非真值表,且也就是我們所謂的與運(yùn)算。

邏輯電路

那電路呢?通常電子部件組成的導(dǎo)電回路,稱為電路。而在數(shù)字電路中,只取0和1,0代表低電平,1代表高電平。數(shù)字的1和0對(duì)應(yīng)了邏輯上的真與假,因此這種電路叫做邏輯電路。

大的電路也都是由小的電路模塊組成,因此在CPU中需要設(shè)計(jì)很多基礎(chǔ)的邏輯電路,例如比較器、加法器、編碼器等等

比較器

比較器的輸入是A、B的兩個(gè)32位的二進(jìn)制數(shù),粗箭頭表示多根線,細(xì)線代表一根線,每根線的電平為高或者低,代表1或0。A和B各代表32根線,每一根線代表1位。輸出則有3根線,如果A>B,則第1根線呈高電平,其余兩根線呈低電平,如果A=B,則第2根線呈高電平,其余兩根線呈低電平,如果A<B,則第3根線呈高電平,其余兩根線呈低電平

編程中的if、else語(yǔ)句就會(huì)用到比較器:


比較強(qiáng)

加法器

加法器是數(shù)字電路中最重要的模塊,它是所有運(yùn)算的基礎(chǔ)。實(shí)際上加、減、乘、除四則運(yùn)算都可以使用加法器實(shí)現(xiàn)。在數(shù)學(xué)中,減法是加法的逆運(yùn)算,除法是乘法的逆運(yùn)算。例如加法是a+b,則減法可寫(xiě)為a+(-b),乘法是a*b,則除法為a*(1/b),另外,a*b又可解釋為有b個(gè)a相加,a+a+a+...,因此僅使用一個(gè)加法器就可以構(gòu)建出加、減、乘、除四種運(yùn)算,而這樣做可以降低CPU設(shè)計(jì)的復(fù)雜度。

編碼器

當(dāng)我們?cè)阪I盤(pán)上敲一個(gè)鍵時(shí),計(jì)算機(jī)怎么知道我們敲的是哪個(gè)鍵呢?

實(shí)際上是因?yàn)槊總€(gè)鍵都連到一個(gè)編碼器上,假如按了數(shù)字3這個(gè)鍵,相應(yīng)的連線變成高電平,編碼器就輸出這個(gè)鍵的編碼。如果有16個(gè)按鍵,那么輸出可以用4根線表示,按鍵0用0000表示,按鍵1用0001表示……計(jì)算機(jī)只需根據(jù)編碼器輸出的編碼就知道了我們按的是什么鍵,從而進(jìn)行相應(yīng)的處理。

解碼器

有了編碼器,那自然會(huì)有解碼器,不然怎么知道每個(gè)編碼代表什么意思呢?解碼器將每個(gè)編碼解析之后輸出到顯示屏上面顯示出來(lái)。

二進(jìn)制的運(yùn)算:

二進(jìn)制表

加法

為了簡(jiǎn)單,現(xiàn)在假設(shè)我們只有一個(gè)4位的加法器,則5 + 3的運(yùn)算如下

將十進(jìn)制數(shù)轉(zhuǎn)為二進(jìn)制

將各個(gè)位上的數(shù)字相加,滿二進(jìn)位

加法運(yùn)算’

再來(lái)算一下8 + 9的結(jié)果

做加法

可以看到,由于我們只有四位,溢出的部分將被丟棄,黃色數(shù)字被丟棄,因此使用四位加法器計(jì)算8 + 9的結(jié)果是1

減法

有了加法,還需要算減法,那我們?nèi)绾尾拍苁褂眉臃ㄆ鱽?lái)計(jì)算減法呢?要解決這個(gè)問(wèn)題,首先要引入補(bǔ)數(shù)的概念。

在日常生活中,時(shí)鐘的時(shí)針轉(zhuǎn)一圈為12小時(shí),假如現(xiàn)在時(shí)鐘的時(shí)針指示到六點(diǎn),想要它指向三點(diǎn),我們可以按順時(shí)針?lè)较驅(qū)⑺鼡芫鸥?,也可以逆時(shí)針?lè)较蜣D(zhuǎn)三格,結(jié)果是一致的。如果我們規(guī)定順時(shí)針?lè)较驗(yàn)檎?,逆時(shí)針?lè)较驗(yàn)樨?fù),那么-3和9的效果是等價(jià)的,這時(shí)候就可以說(shuō)-3和9是以12為模的補(bǔ)數(shù)。

補(bǔ)數(shù)的一些概念:

一個(gè)正數(shù)和一個(gè)負(fù)數(shù)互為補(bǔ)數(shù)時(shí),兩數(shù)的絕對(duì)值之和稱為模

一個(gè)負(fù)數(shù)可用它的正補(bǔ)數(shù)來(lái)代替,而這個(gè)正補(bǔ)數(shù)可以用模加上負(fù)數(shù)本身來(lái)得到

正數(shù)的補(bǔ)數(shù)為其自身

我們知道4位二進(jìn)制最多只能表示16個(gè)數(shù)字,這就像時(shí)鐘上一圈只能表示12個(gè)小時(shí)一樣,因此直觀的就能感知到4位二進(jìn)制中互為補(bǔ)數(shù)的模一定是16。

有了補(bǔ)數(shù)的概念,就可以將一個(gè)負(fù)數(shù)轉(zhuǎn)換為它的正補(bǔ)數(shù),例如要計(jì)算8 - 3可以寫(xiě)成8 + (-3),將-3轉(zhuǎn)為它的補(bǔ)數(shù)13,那么最后只需要計(jì)算8 + 13的值就可以計(jì)算出8 - 3的值,如果大家不信,我們就來(lái)算一算

加法運(yùn)算

將8和13的二進(jìn)制相加,結(jié)果為10101,因?yàn)槲覀兪撬奈惶幚砥?,結(jié)果溢出,必須丟棄最高位的數(shù)字,最終結(jié)果為0101,它的十進(jìn)制結(jié)果正好是5,怎么樣,神奇嗎?

引入負(fù)數(shù)

補(bǔ)數(shù)實(shí)際上是一種處理帶符號(hào)數(shù)的方法,用于變換數(shù)字的符號(hào)。這在計(jì)算機(jī)中被稱為補(bǔ)碼。我們之前算補(bǔ)數(shù),需要借助模,實(shí)際上在計(jì)算機(jī)中,求補(bǔ)碼有一套簡(jiǎn)單的辦法,口訣就是取反加一

例如求13的二進(jìn)制補(bǔ)碼,那么就先將它的二進(jìn)制取反,即對(duì)1101的每一位取反,我們前面說(shuō)過(guò),1表示真,0表示假,取反就是邏輯非運(yùn)算,對(duì)1取反自然就變成0了,所以取反后的二進(jìn)制為0010,然后對(duì)取反后的結(jié)果加上1,最終結(jié)果就是0011,它的十進(jìn)制就是3,正好與13互為補(bǔ)數(shù)。

計(jì)算機(jī)二進(jìn)制補(bǔ)碼求法你學(xué)會(huì)了嗎?

咱們之前計(jì)算的都是正數(shù)的加減運(yùn)算,有同學(xué)肯定會(huì)疑問(wèn)了,那如果引入負(fù)數(shù)會(huì)如何呢?

首先要明確一點(diǎn),如果想表示負(fù)數(shù),那肯定需要有一位來(lái)表示符號(hào),因此4位二進(jìn)制中,就只剩下三位有效位了,表示的正整數(shù)范圍肯定會(huì)變小了。假設(shè)我們讓4位二進(jìn)制的最高位表示符號(hào)位,0表示正數(shù),1表示負(fù)數(shù),那么正數(shù)的范圍只能是1~7,負(fù)數(shù)的范圍是-8~-1

進(jìn)位

在計(jì)算機(jī)中,負(fù)數(shù)的二進(jìn)制使用它的補(bǔ)碼表示,而補(bǔ)碼的求法就是取反加一。例如-1的補(bǔ)碼就是1的二進(jìn)制取反加一,當(dāng)有符號(hào)位時(shí),符號(hào)位是不參與取反的,因此就是001取反加一得111

好了,學(xué)了這么多概念,趕緊來(lái)計(jì)算一下4 - 6的結(jié)果吧

加法計(jì)算
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容