計算機中所有數據是二進位保存,這些複雜電路是如何做運算的呢?

2020-12-06 編程達人

這個問題並不難,簡單點的說就是邏輯運算啦。邏輯運算是CPU運算的本質,學過數學或者計算機的人都很容易理解的。再複雜的運算都是由這些最基本的邏輯運算構成的。接下來讓我們詳細的了解一下吧。

邏輯運算是CPU運算的本質,不管是計算機能處理多麼複雜的事情,它最終還是通過電路的開關來實現的。邏輯是指對某個事物的推理,「真」和「假」是兩個對立的邏輯狀態,邏輯運算是指用數學符號來表示邏輯狀態,以便於用數學方法研究邏輯問題。我們通常將電路通電狀態表示為「真」,用數字「1」表示,不通電錶示為「假」,用數字「0」表示。「或」、「與」、「非」是三種基本邏輯運算,計算機邏輯運算也包含「異或」、「位」。

1、或運算

或運算:彙編中用「OR」表示,C語言中用「|」來表示,可以理解為「或者」,即只要有一個條件滿足就為「真」,用電路來描述:只要有一條電路通電這條總電路就能通電,原理如圖1-6-1:

圖1-6-1:OR運算等效電路

這是一個並聯電路圖,不管是A為閉合狀態、還是B為閉合狀態,還是AB都處於閉合狀態,電燈泡都能亮。我們把電路圖用符號0和1來表示,或運算表示只要有一個為1,結果就為1。我們來看一個寬度為8的或運算:

2、與運算

與運算:彙編中用「and」表示,C語言中用「&」來表示,它表示兩個條件都成立才能為真,即兩個都為1結果為1,其他為0,電路實現原理如圖1-6-2:

圖1-6-2:AND運算等效電路

這是一個串聯電路圖, A和B都為閉合狀態,燈泡才能亮。如果有一個開關沒有閉合,燈泡是不能亮的。即兩個都為1,結果為1,只要有一個為0 ,結果為0。

我們來看一下下面的運算:

3、異或

異或:彙編用「xor」表示,C語言中用「^」表示,這個不是太好理解,但是它很有用。它表示兩個值不同為真,相同為假。即兩個值如果都為0或者1,結果為0。一個為0,而另一個為1,結果為1。如圖1-6-3所示:

圖1-6-3:XOR運算等效電路

這條電路A和B必須是相反的兩種狀態燈泡才能亮,如果AB都斷開,燈泡無疑是不亮的,如果AB都連上,正負極抵消,燈泡同樣不能亮。我們來看一下下面的運算:

4、非運算

非運算:彙編中用「NOT」表示,C語言中用「!」表示,它是對某個值求反的運算。如 !0 = 1;!1 = 0;非真即為假,非假即為真。

我們來看一下下面的運算:

5、左移運算

左移運算:在右邊添0,數據往左移動,用符號「<<」表示,如「0010 << 1 」表示將0010左移1位,結果為0100。

6、右移運算

右移運算:在左邊添0,數據往右移動,用符號「>>」表示,如「0010 >> 1」表示將0010右移1位,結果為0001。

【邏輯運算的具體應用】

例1:計算機通過邏輯運算實現四則運算。

計算機的本質是邏輯運算,不管多麼複雜的運算最終都回歸到邏輯運算。可是我們生活當中的計算並不是邏輯運算,這又是怎麼回事呢?那麼CPU是如何通過邏輯運算做「+、-、*、/」的呢?雖然我們平常生活中並不會碰到這個問題,但是可以做一些簡單的了解,能幫助我們更清楚地認識計算機的本質。

我們來看一下CPU是如何算出2+3等於5的。

計算機如果要做運算,必須要把2和3分別存儲下來,就是先用幾條線路來表示它們。前面我們學數據寬度時講到容器,那我們就用最少的容器來保存2和3。假設有BYTE x保存2,BYTE y 保存3,那這兩個容器裡的數值是這樣的:

這個結果放在哪呢?我們再拿一個容器R來保存,假設它的寬度也是8位,此時R的值為:0000 0001。

第二步,CPU再讓它們進行與運算:

這一步是為了測試上一步有沒有結束。

再將這個結果左移1位,如果這個值等於0,那R就是計算的結果,不為0重複之前的操作。0000 0010左移1位等於0000 0100,不為0,所以繼續運算, 將R容器裡的值放到x容器中,把與(and)的值放在y裡,

x: 0000 0001

y: 0000 0100

繼續之前的操作,先將它們異或,值為0000 0101,將這個值存到R容器。再將x容器和y容器裡的與運算,值為0000 0000。將它左移一位還是0,所以R的值就是我們計算的結果,即為0000 0101,轉換為十進位就是5。

2+3對於我們來說,幼兒園就會算了,而計算機卻要執行如此多步驟。其實計算機很笨,它只會按照一定規則去操作,但是它卻靠著比我們人類快無數倍的速度幫我們人類解決很多棘手的問題。

例2:獲取某個數的第N位的值。

比如我們的寄存器每一位代表不同的含義,假如需要判斷某一位的值,或者更改某一位的值、而其他的值保持不變,那怎麼才能做到呢?如有個數值,我想知道它的第3位是否為1,應該怎麼運算呢?根據前面的邏輯運算,我們知道與運算的法則是「有0為0,兩個都為1才為1」,所以我們可以設置一個第3位為1的值,無論我們要測試的值是幾位數,我們只需要將它與0100進行與運算即可。當這個值與「0100」進行與運算,只能是兩個結果,一個結果為0,一個結果為 0100,也就是結果只有兩種情況:「0」和「非0」,若為0,這個數值的第3位為0,反之,不為零。

所以我們可以利用與、或的特點,我們來驗證一下,假設有個要測試的值為8F,我們要測試它的第5位是否為0。

根據之前的方法,我們將它和「0001 0000」相與:

結果為0,所以這個值的第5位也是0。

例3:加密解密

異或在加密算法裡經常遇到,兩次異或同一個值,就會還原成異或原來的值。這個需要異或的值我們叫做密鑰。採用異或加密的時候,密鑰的作用很關鍵。諜戰片裡的那些電報也是加密的,常常因為一本密碼本劇情起伏不斷,可見密鑰的重要性。

比如我們要加密0x2015,密鑰為:0x54計算如下:

加密:每兩位十六進位數分別與54進行異或:

相關焦點

  • 6.4二進位的應用-現代計算機
    十進位與二進位相比,十進位的數字長度更短,更容易辨識書寫,另一方面十進位的應用需要掌握比二進位應用更複雜的加法表與乘法表。二進位的發明追溯至萊布尼茨。萊布尼茨對二進位情有獨鍾,用法國數學家、物理學家拉普拉斯(Laplace,1749.3-1827.3)的話說:「萊布尼茨在他的二進位算數中看到了宇宙創始的原象。他想像1表示上帝,0表示虛無。
  • 計算機對數據的處理為什麼有大小限制呢?
    必須掌握的知識點:1、數據寬度2、 理解有符號數、無符號數3、進位的符號4、容器的種類在計算機的世界裡,保存在磁碟上的數據,無論是電影、還是音樂,還是可執行程序都是由0和1組成的,這些用磁碟保存的數據它可以是任意大小的數據嗎?這些數據又是如何運算呢?
  • 數據的表示和運算
    前言◆ ◆ ◆ ◆這期本來是想寫hashMap的,但是裡面哈希和擴容之類的,很多都是位運算,不太熟悉的同學看著會很難受,所以先補充一些計算機組成的知識。進位轉換◆ ◆ ◆ ◆計算機中,二進位是最廣泛的一種數制,以高低電平來表示二進位。
  • 細思細恐,人生就像是二進位,不是0就是1
    至今在德國圖靈的郭塔王宮圖書館裡,仍然保存著一份珍貴手稿,其標題為:「1與0,一切數字的神奇淵源。這是造物美妙的典範,因為,一切無非都來自上帝。」這是天才萊布尼茨的手跡。二進位最適合邏輯運算,它只有兩個數碼,正好與邏輯代數中的「真」和「假」相吻合。二進位兩個數碼正好與邏輯命題中的「真(True)」、「假(False)」或稱為」是(Yes)」、「否(No)」相對應。
  • 二進位或BCD的轉換電路
    需要對數據做算術運算的系統一般都是採用二進位形式。而要顯示這些結果,就必須將數據轉換為BCD格式。另一方面,來自數碼開關的地址選擇信息則必須轉換為二進位格式,才能用於存儲器尋址操作。本文引用地址:http://www.eepw.com.cn/article/177043.htm對於不需要快速轉換的應用, 用一個可完成兩種轉換的電路就足夠了。圖1 就是此類電路, 它採用加/ 減計數器以獲得所需要的結果。在做二進位/ BCD 轉換時, 二進位計數器中預置二進位值, 並清除BCD 計數器。
  • 小學生必備科學常識100問-25二進位
    但是,現代生活的必需品——電子產品,卻是基於另一種進位的。這就是我們今天要講到的——二進位。十進位是滿十進一,二進位就是滿二進一,這個規則是統一的。因此,二進位中,只有0和1這兩個數。那麼二進位究竟是如何運算的?我們具體來看看。
  • 現代二進位計算機,其原理到底是不是從八卦中引出的呢?
    計算機在赫爾曼手中首度接上了電,但電只是用來驅動繼電器進行計算,靠的是電磁鐵的機械動作,而不是電流本身。因此赫爾曼的自動制表機只能算是電力驅動的機械式計算機,仍然不是電子計算機。 計算機要蛻變為現代電腦,必須擺脫機械方式,改用電流本身來做計算。
  • 三分鐘熟悉進位轉換與位運算
    一種進位中可以使用的數字符號的數目稱為這種進位制的基數,若一個進位的基數為 N,則可稱之為 N 進位,即表示數值時滿 N 進一。在生活中最常用的是十進位,使用 10 個阿拉伯數字 0 到 9 進行記數。而在電子計算機領域,內部使用的是二進位,電路的狀態通過 0 和 1 表示來實現記數。八進位和十六進位計算機領域也較為常用,尤其十六進位。
  • [洛穀日報第79期]二進位與位運算
    我們都知道,計算機是使用二進位進行存儲和計算的。十進位的出現是因為人類有十個手指,比較方便表示十進位;而對於計算機而言,因為計算機要依靠電源,而電源只有通電和斷電兩種情況,所以二進位就成為了計算機的基礎進位。一道送分題對於二進位,似乎更多的考題是在初賽,但複賽也會涉及到一些內容,而且也可以運用在生活中。
  • 關於二進位世界的秘密
    我們都知道,計算機的底層都是使用二進位數據進行數據流傳輸的,那麼為什麼會使用二進位表示計算機呢?或者說,什麼是二進位數呢?在拓展一步,如何使用二進位進行加減乘除?二進位數如何表示負數呢?本文將 一一 為你揭曉。
  • C語言基礎:二進位和計算機語言雜談(編程新手福利)
    說計算機語言之前,先要說明計算機的工作原理。如果是最簡化的描述計算機,那麼它就是很多很多個開關。這些開關組合成了一些邏輯電路,很多很多個邏輯電路組合在一起就變成了計算機的處理器(CPU),在加上儲存設備,輸入輸出設備就變成一個現在的計算機的樣子了。
  • Java二進位和位運算,這一萬字準能餵飽你
    二進位在了解什麼是位運算之前,十分有必要先科普下二進位的概念。二進位是計算技術中廣泛採用的一種數制。二進位數據是用0和1兩個數碼來表示的數。它的基數為2,進位規則是逢二進一,借位規則是借一當二。因為它只使用0、1兩個數字符號,非常簡單方便,易於用電子方式實現。
  • Python零基礎入門——認識二進位數
    這節課我們主要學習二進位數。為什麼要學習二進位數呢?因為二進位數只有兩個數字0和1,因此二進位數非常適合描述電路的通與短、開關的打開與關閉。例如,我們可以用二進位數0和1來表示燈泡的亮與不亮,用二進位數0來表示燈泡不亮,用二進位數1來表示燈泡亮,這樣我們就可以用多個二進位數來表示燈泡的亮與不亮了。如01011表示有三個燈泡亮,兩個燈泡不亮。
  • 十進位數的編碼與運算
    在計算機內實現BCD碼之間的算術運算要複雜一些,在某些情況下,需要對加法運算的結果進行修正。這種編碼方法的好處是,從一編碼變到下一個相鄰編碼時,只有一位的狀態發生變化,有利於得到更好的解碼波形,在模擬→數字、數字→模擬轉換的電路中得到更好的運行結果。用四個二進位位的格雷碼表示十進位數的十個狀態的方案很多。表2.10給出兩組最常用的編碼值。
  • 每秒1000億次的運算速率,光子計算機將改變我們的生活
    ,隨著科技的發展,計算機晶片上的電晶體可以越做越小,但是,電晶體不可能做得無限小,要從根本提升計算能力,必須另闢蹊徑,採用新的運行原理。有人腦洞大開,可以直接用光來做計算機,用光子取代電子,這是基於光子學和光子技術基礎的光子計算機,理論上光子計算機可以將現代電腦的運行速度提升幾百上千倍,如果用光子來計算,那首先考慮的問題就是怎麼使光束表達出數字電路中的0和1,還要開發出光子晶片,它的基礎原理就是光學開關器。
  • 計算機二進位數據是什麼,和十進位有什麼區別?還有其他的進位嗎
    大家好,我是阿戴,歡迎到我的地盤,作為一名計算機愛好者,期待更多人了解編程,期待每一篇文章都能夠讓你增加知識,如果喜歡,請關注、轉發,謝謝。在看科技電影或電視劇的過程中,我們經常看到這樣的畫面,電腦屏幕上在快速閃爍著大量的數字0和1,感覺非常神秘、非常高大上的樣子。
  • 第15p,計算機的進位與存儲單位,計算機底層理論知識(了解)
    進位是一種單位,方便我們記錄和統計;日常生活中有很多進位的例子; 1星期是7天,逢7進1,這就是7進位; 1分鐘是60秒,逢60進1,這就是60進位; 1年有12個月,逢12進1,這就是12進位; 計算機中只有0和1,逢2進1 ,這就是二進位;2、計算機常用進位的簡單介紹計算機中常用的進位包括
  • 誰發現和選擇了「二進位」這個開啟人類社會數位化信息化大門的金鑰匙?
    圖1. 8、16和32位二進位數可表達的十進位數的範圍現代數學對不同進位記數法已經研究透徹,十進位、二進位和十六進位應用較廣。二進位因每位數字的二值性,四則運算可以簡化為加法和移位兩種運算,以及與邏輯判斷的可對應性,在現代數字電路和計算機中廣泛應用。
  • 計算機使用二進位
    在日常生活中,我們使用的是十進位,那麼我們為什麼會使用十進位?什麼是十進位?在計算機中我們還使用十進位嗎?
  • 為什麼電腦採用二進位?十進位究竟代表人腦的進化還是退化?
    為什麼人類的運算最終統一為十進位?具體的歷史發展進程已經很難準確地進行考證,但大概率一定是因為人有10根手指。比如我國古代就曾使用過十六進位,但最終還是被歷史所淘汰。直到萊布尼茨提出二進位算法,人們才發現越簡單就越優化。後來,隨著計算機的發展,人們終於意識到二進位算法的速度遠遠優於十進位。