太多事情要忙,都好久沒更新了,廢話不多說開始吧!!!!
閱讀本文所需知識:進制數轉換及運算。
圖片來源于網絡
BCD碼的概念百度定義:BCD碼(Binary-Coded Decimal)亦稱二進制十進制或二-十進制代碼。用4位二進制數來度表示1位十進制數從16位組合中取出的0~9這10個數碼。
例如:十進制28用BCD碼表示(0010 1000) ps:0010(2)1000(8)概念一目了然
BCD碼是二進制和十進制相互轉換編碼,這使二進制與十進制的轉換更加便捷,同時保存數值的精确度,避免電腦作浮點運算所耗的時間。
因為計算機中數據都是用二進制進行存儲,所以二進制和十進制需要相互轉換,它們轉換是比較麻煩的,然而BCD碼正好解決了這個問題。BCD碼把十進制每一位用4位二進制來表示。上面那個例子就是證明。
BCD碼分類壓 縮 碼:用4位二進制數來表示一位十進制數(例如:2(0010))
非壓縮碼:用8位二進制數來表示1位十進制數(例如:2(0000 00010))
那麼問題來了,為什麼不直接使用壓縮碼? 高效又節省空間。
ps:因為一個字節是8位,而且每個數據所表示的長度不同。
有權碼:8421碼、2421碼、5421碼
無權碼:餘三碼、餘三循環碼、格雷碼
圖片來源于網絡
有權碼8421碼
8421碼是BCD碼最常用的編碼方式,也被稱為BCD碼。
位權如名:8、4、2、1 (表示範圍:0~9(0000~1001),禁用碼:10~16(1010~1111)
例如:543D = 0101 0100 0011B (ps:D表示十進制數;B表示二進制數)
8421碼對應ASICC碼的第四位相同,這特點有利于簡化輸入輸出過程中BCD碼和字符代碼的轉換。
位權:2、4、2、1
例如:642D=1100 0100 0010B
問題來了,仔細觀察位權裡有兩個2,這樣就會重複問題,比如說:0101和1011都對應5。
所以做出規定:0101~1010不許用
禁用碼:0101、0110、0111、1000、1001、1010
2421碼是對9的自補代碼(自補性)
即每一個2421碼隻要與自身按位取反,便可得到該數9的補數的2421碼。
例如:0100(4)即各位取反後正好為該數9的補碼1011(5)。
而0101取反後1010對應十進制10顯然不滿足自補碼的要求。
好處:給運算帶來方便,因為可以利用其對9的補數将減法運算轉變為加法運算
(0000)和(1111)、 (0001)和(1110)、 (0010)和(1101)、 (0011)和
(1100)、 (0100)和(1011)互為反碼,仔細觀察它們具有反射特性
做加法是若兩個數之和為10正好等于二進制的16(0001 1111=16),于是便能高位自動産生進位信号。
位權:5、4、2、1
注意位權不同表示的數也不同,看上面的例子相信你們也能理解了。
禁止碼:0101、0110、0111、1101、1110、1111
5421碼同樣也有2421碼的自補性。
真值表
無權碼餘三碼是在8421碼基礎上 0011(3)(比如:8421碼0 0011(3)=0011)
表示範圍:3~12(0011~1100)
禁 用 碼 :0~2(0000~0010)、13~16(1101~1111)
那麼它的作用及特點是什麼?
餘三碼同樣也有對9的自補性,0和9, 1和8,…..5和4的餘3碼互為反碼,這在求對于10的補碼很方便。
兩個餘3碼表示的十進制數相加時,能産生正确的進位信号,但對“和”必須修正。
修正方式:如果有進位信号則結果 0011(3),如果沒有進位信号則結果減0011(3)
例如:
有進位需修正 所以結果0010 0011(餘三碼3)= 2(轉換十進制) 2 上進位10=12(結果正确)
ps:當兩個十進制數的和是10時,相應的二進制編碼正好是16,于是可自動産生進位信号,而不需修正,餘3碼常用在BCD碼運算電路中。
不懂的看下面的真值表對應,理解格雷碼再理解餘三循環碼。
8421>>>格雷碼
推理方式:異或法(相同為0,相異為1)如圖
特點:任何兩個相鄰的碼字僅有一位不同(不懂看真值表)
作用:雖然自然二進制碼可以直接由數/模轉換器轉換成模拟信号,但在某些情況,例如從十進制的3轉換為4時二進制碼的每一位都要變,使數字電路産生很大的尖峰電流脈沖。但是如果隻有一個觸發器發生改變的話,那麼這些模糊狀态就不會出現。
比如:數字7(0111)轉8(1000),二進制要每一位都要改變,而格雷碼的話隻需要改變一位7(0100)轉8(1100)。
格雷碼是一種具有反射特性和循環的單補自補代碼,可靠性編碼,使錯誤最小化的編碼方式
循環和單步特性消除了随機取數時出現重大錯誤的可能。
反射和自補特性使得對其進行求反操作也非常方方便。
仔細觀察格雷碼的編碼方式,查看其最大數碼和最小數碼,它們兩者仍然具有“兩個碼字中僅有一位代碼不同”的特點,那麼也可以認為它們也是相鄰的,因此,格雷碼也稱為循環碼。(變權碼)
仔細觀察16個4位格雷碼
從上往下依次讀出格雷碼的最後一位:0110 0110 0110 0110;
再從上往下依次讀出格雷碼的倒數第二位:0011 1100 0011 1100;
再從上往下依次讀出格雷碼的正數第二位:0000 1111 1111 0000;
看出規律了嗎?它這種特性稱為“反射特性”
Ps:數據(0、1)在計算機中都是由存儲器進行存儲又被稱為寄存器,寄存器一般情況下觸發器來存儲,一個觸發器隻能存儲一個二進制數(0和1),也就是說如果需要存儲四位格雷碼就需要四個觸發器進行存儲。
8421碼>>格雷碼>>>餘3循環碼(餘3碼基礎上)
取自4位典型格雷碼的3~12這10個代碼(即0~9的餘3循環碼0010~1010),此乃“餘3”之意
仍具有格雷碼的優點:兩個相鄰的代碼隻有一位碼元改變(大大減低錯誤的概率)。
注意:同一個8位二進制代碼表示的數,當認為它表示的是二進制數和認為它表示的是二進制編碼的十進制數時,數值是不相同的。
例如:00011000,當把它視為二進制數時,其值為24;但作為2位BCD碼時, 其值為18。
BCD碼與二進制之間的轉換不是直接進行的, 當需要将BCD碼轉換成二進制碼時,要先将BCD碼轉換成十進制碼,然後再轉換成二進制碼; 當需要将二進制轉換成BCD碼時,要先将二進制轉換成十進制碼,然後再轉換成BCD碼。
如果有錯誤的地方望指出,一起交流學習讨論。
,更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!