知識框架
No.0 引言
探討的兩大主題:一步步遞進
- 那么現在就需要探究 數據如何以2進制的形式在計算機中表示的呢??
- 那么還有就是計算機如何進行數據的算術和邏輯運算的??
No.1 數制與編碼
一、進位計數制及其相互轉換
我們平常使用的是10進制的數據,然而計算機能夠識別的是2進制的01序列串。
主要是權重的不同。一方面符號表示權重,一方面符號的位置表示權重叫位權。比如975;
101001B、1652H、168D
- 其它進制數轉換為十進制(不同的數碼位在不同的位置有不一樣的位權)
- 二進制<---->八進制、十六進制進行轉換(三個二進制位進行組合、四個二進制位進行組合)
- 十進制轉化為---->任意進制(整數和小數部分分別進行處理)。
- 真值和機器數;如果十進制數還帶正負怎么辦呢??如何在計算機中以2進制存儲呢?
- 真值:符合人類習慣的數字
- 機器數:數字實際存到機器里的形式,正負號需要被“數字化”;0正1負。
二、BCD碼
BCD碼包括了三種即三種映射關系;那么引入BCD碼是為了什么呢?
為什么說是二進制編碼的十進制數?答:每四個比特的信息來對應上一個十進制位;
- 8421碼:
- 余3碼
- 2421碼
三、無符號的整數在計算機內部表示和運算
無符號整數:即自然數=0+正整數:”0、1、2、3、4、、、、“
首先是沒有符號,然后只是整數。
兩個大問題:無符號整數,在計算機硬件中如何表示的呢?
? :無符號整數,在計算機內部如何進行加法、減法運算怎么用硬件實現的呢?
1、表示
第一個大問題:無符號整數,在計算機硬件中如何表示的呢?
- 假設機器字長是8位的前提下;(當然現實是機器字長通常是64位or32位的)
- 也就是說機器字長是限制了每次多少位數字的運算’下面均以是8位的為舉例子。
- ①:全部二進制位都是數值位,沒有符號位,第i位的位權是2^i-1.
- ②:n bit無符號整數表示范圍0~2^n-1,超出則溢出,意味著該計算機無法一次處理這么多
- ③:可以表示的最小的數全0,可以表示的最大的數全1.
2、加法、減法實現
第二個大問題:無符號整數,在計算機內部如何進行加法、減法運算怎么用硬件實現的呢?
- 計算機硬件如何做到無符號整數的加法呢?:從最低位開始,按位相加,并往更高位進位
- 在加法的時候也就是按照正常的二進制加法進行。而如果溢出的話也就會溢出截斷了。
- 計算機硬件如何做到無符號整數的減法呢?:減法的話就不是平常那樣了,要進行特殊處理
- ①”被減數” 不變 "減數”全部位按位取反、末位+1,減法變加法
- ②從最低位開始,按位相加,并往更高位進位(加法規(guī)則)
- ③最高位溢出丟棄,并不影響我們的結果。
- 那么為什么多此一舉將減法變成加法呢???
- 因為:加法電路造價便宜,減法電路造價昂貴若可將減法轉變?yōu)榧臃ǎ詫p法操作變成等價的加法操作,可以更省錢
- 那么為什么可以這樣取反+1等就可以變化等價呢?這里是數論的知識了。
四、帶符號的整數在計算機內部表示和運算
帶符號整數:即整數:”-4、-3、-2、-1、0、1、2、3、4、、、、“
首先是有符號,然后只是整數。
兩個大問題:帶符號整數,在計算機硬件中如何表示的呢?
? :帶符號整數,在計算機內部如何進行加法、減法運算怎么用硬件實現的呢?
? 后面有個總結就是所有的帶符號整數的運算都要先將原碼轉化為補碼然后再進行運算。
1、表示
第一個大問題:帶符號整數,在計算機硬件中如何表示的呢?
- 為什么帶符號整數的表示有原碼、反碼、補碼這些東西呢?
- 是因為在計算機內部我們表示一個帶符號的數值的時候,同一個含義用不同的編碼方式表示
- 當然不同的編碼表示有各自的優(yōu)點和缺點;
1.1、原碼表示
首先帶符號整數表示中現以 原碼為例子:
- 假設機器字長是8位的前提下;(當然現實是機器字長通常是64位or32位的)
- 所以由于硬件的限制,那么帶符號的整數表示的它的比特位位數是有上限的;
- 也就是說機器字長是限制了每次多少位數字的運算’下面均以是8位的為舉例子。
- ①符號位“0/1”對應“正/負”,剩余的數值位表示真值的絕對值
- ②若機器字長n+1位,帶符號整數的原碼表示范圍: 一(2^n-1) ≤x ≤ 2^n-1
- ③真值0有兩種形式:+0和-0 ,[+0]:=0,0000000;[-0]原 =1, 0000000
1.2、原碼形式實現加減法運算不行
基于原碼表示的有符號整數,如何實現加減法呢?
- 如果我們按照無符號的整數進行 從最低位開始往上加,按位相加(?)。
- 但是我們在無符號的整數表示的時候最高位是表示的數值信息,但在這里是符號的信息。所以不行。
- 原碼的缺點:符號位不能參與運算,需要設計復雜的硬件電路才能處理,費錢!貴!(也可以但是貴)
- 所以 科學家發(fā)明了這樣的方法:用補碼表示真值–符號位可以參與運算。(所以參與運算前都要轉化為補碼)
- 即我們在用原碼進行實現加減法的時候不方便,所以要將原碼的表示形式轉化為等價的補碼表示即可。
1.3 補碼表示
如何進行補碼的表示呢在計算機的硬件之中??
其實是 從原碼轉化過來的:原碼–>反碼–>補碼
不管是原碼、反碼、補碼、這三個的最高位都反映了符號位(0正1負),
所以可能轉化為10000000嗎這個形式?是的,當一個有符號數在二進制下的表示的最高位為1時,表示該數是一個負數。在進行原碼轉補碼的時候,如果剛好進位到最高位,將會得到補碼的最高位為1,即10000000。這個補碼所代表的負數通常是最小的負數,也就是-128。因此,當進行原碼轉化為補碼的時候,可能轉換得到10000000這個形式。
只不過是補碼的符號位可以參與運算。?
如何快速的將 原碼和補碼進行相互轉換呢?兩種方式:
第一種計算機中形式:那么計算機中硬件中是如何實現補碼到原碼的轉換的呢?
計算機中是這樣實現的:從補碼出發(fā),符號位不變,然后數值位取反,最后+1
第二種手動形式:如下圖:
1.4 補碼實現加法運算
- 從最低位開始,按位相加,(符號位參與運算),并且往最高位進位。
- 最后我們只保留更低的八位bit,最前邊的一位給它丟棄。
- 最終得到的結果也是補碼的形式,而想要知道數值為多少就需要將這個結果補碼轉化為原碼。
1.5、補碼實現減法運算
- 因為加法電路造價便宜,減法電路造價昂貴。若可將減法轉變?yōu)榧臃?,省錢!
- 那么怎么轉呢?
- 即因為A-B=A+(-B); 然后將這些原碼轉化為補碼然后進行加法運算,然后再將最終的補碼結果轉化為原碼結果。
- 由于計算機在一開始就把所有的原碼轉化為補碼了;
- 即“被減數(補碼形式)”不變,【“減數(補碼形式)”全部位按位取反、末位+1】變?yōu)閇-B]補,減法變加法
- (補碼形式)從最低位開始,按位相加,并往更高位進位。得到最終結果補碼形式。
一個具體的帶符號數的減法例子:
1.6、原碼反碼補碼特性對比
下面的東西都是在 n+1 位bit的合法表示范圍。
各種特性總結如下:
因為補碼的那個最小負數轉化為位數相同的原碼是不可能的。因為范圍限制。
溢出問題:關于兩個數A和B進行某種運算后,是否發(fā)生溢出?―-手算做題可以帶入十進制驗證,是否超出合法范圍
A=-64,B=-64;如果題目是 用 原碼進行 講述 的,那么最后結果保存用原碼的話就會溢出;原碼范圍是-127~127;
而如果A和B都是補碼的形式的話,那么最后結果保存是不會溢出的,因為補碼范圍是-128~127;
1.7、移碼表示
那么怎么得到移碼呢?
從補碼得到:補碼的符號位取反即可。
注意:移碼只能用于表示整數(且是帶符號的整數)
- 因為移碼是從補碼進行轉化的,所以一些補碼的特性就可以按照著來;
- 補碼0的形式只有一種即0,00000000則[0]的移碼就有一種:1,00000000
- 那么補碼的 數據范圍也是 -128~127(前提是n+1位的bit);
五、定點小數的表示和運算
定點的意思是什么呢?定點的意思是小數點的位置固定。
定點數:定點整數即帶符號整數(也就是小數點的位置固定在了最后一位的右下角
? :定點小數(也就是小數點的位置固定在了 符號位的右下角。
- 對于第一個大問題表示中,其實也只是臆想,不是一個bit位來存儲的。簡稱規(guī)定。
- 定點整數的編碼表示:原碼、反碼、補碼、移碼
- 定點小數的編碼表示:原碼、反碼、補碼
5.1、原碼中定點整數和定點小數
下面的都是以8bit位來進行說明的。
小數點的位置不一樣,導致的 各個bit“位權”不一樣。
5.2、定點小數的反碼補碼表示
與帶符號整數的 原碼–》反碼、補碼的轉化形式一模一樣,
5.3、定點小數的加減運算
對兩個定點小數A、B進行加法/減法時,需要先轉換為補碼。
計算機硬件如何做定點小數補碼的加法:
①從最低位開始,按位相加(符號位參與運算),并往更高位進位,
②然后再轉
計算機硬件如何做定點小數補碼的減法:
①“被減數”不變,“減數”全部位按位取反、末位+1,減法變加法;
②從最低位開始,按位相加,并往更高位進位
下面是定點整數和定點小數的比較:如下圖:
小數補碼的加法運算:也是先將各個轉化為補碼再看
反正無論是整數還是小數在進行加法運算的時候,都是要按照那個方法進行
因為計算機為了便宜,計算電路都是一樣的,
No.2 奇偶校驗碼
因為在傳輸的過程中會出現 錯誤之類的,所以我們必須考慮到數據的校驗。
可能計算機元器件發(fā)生故障什么之類的,可能由于環(huán)境的因素噪音的干擾,可能會發(fā)生了位錯誤;01–00
那么我們該怎么才能發(fā)現錯誤呢?
下面是一種可以發(fā)現錯誤的編碼機制:奇偶校驗
- 校驗原理:增加一個冗余的校驗位bit。
- 那么怎么檢測出錯誤呢?
- 假設我們采用偶校驗策略:一個bit發(fā)生跳變直接斷定發(fā)生錯誤了,那么發(fā)生兩個bit發(fā)生跳變呢?(檢測不出來局限性)
No.3 算術邏輯單元(ALU)
一、作用,大致原理
下面是介紹的ALU的一些基本作用:
- 算術運算:加、減、乘、除等
- 邏輯運算:與、或、非、異或等
- 輔助功能:移位、求補等
二、加法器的實現
1、一位全加器
是有一個進位的計數的。
2、串行加法器
如何使用上面的一位全加器 如何實現 多位的加法。循環(huán)使用。像那個RNN樣的圖差不多。
文章來源:http://www.zghlxwxcb.cn/news/detail-442923.html
3、并行加法器
文章來源地址http://www.zghlxwxcb.cn/news/detail-442923.html
到了這里,關于【第二章:數據的表示和運算】的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!