計算機內毫無例外地都使用二進制數進行運算,但通常采用8進制和十六進制的形式讀寫。對于計算機技術專業人員,要理解這些數的含義是沒問題,但對非專業人員卻不那么容易的。由于日常生活中,人們最熟悉的數制是十進制,因此專門規定了一種二進制的十進制碼,稱為BCD碼,它是一種以二進制表示的十進制數碼。
BCD碼
二進制編碼的十進制數,簡稱BCD碼(Binarycoded Decimal)。 這種方法是用4位二進制碼的組合代表十進制數的0,1,2,3,4,5,6 ,7,8,9 十個數符。4位二進制數碼有16種組合,原則上可任選其中的10種作為代碼,分別代表十進制中的0,1,2,3,4,5,6,7,8,9 這十個數符。最常用的BCD碼稱為8421BCD碼,8.4.2.1 分別是4位二進數的位取值。 點擊此處將給出十進制數和8421BCD編碼的對應關系表。
1、BCD碼與十進制數的轉換
BCD碼與十進制數的轉換。關系直觀,相互轉換也很簡單,將十進制數75.4轉換為BCD碼如:
75.4=(0111 (0101.0100)BCD 若將BCD碼1000 0101.0101轉換為十進制數如: (1000 0101.0101)BCD=85.5
注意:同一個8位二進制代碼表示的數,當認為它表示的是二進制數和認為它表示的是二進制編碼的十進制數時,數值是不相同的。
例如:00011000,當把它視為二進制數時,其值為24;但作為2位BCD碼時, 其值為18。
又例如00011100,如將其視為二進制數,其值為28,但不能當成BCD碼,因為在8421BCD碼中,它是個非法編碼 。
2、BCD碼的格式
計算機中的BCD碼,經常使用的有兩種格式,即分離BCD碼,組合BCD碼。
所謂分離BCD碼,即用一個字節的低四位編碼表示十進制數的一位,例如數82的存放格式為:
_ _ _1 0 0 0 _ _ _ _0 0 1 0 其中_表示無關值。
組合BCD碼,是將兩位十進制數,存放在一個字節中,例82的存放格式是1000 0010
3、BCD碼的加減運算
由于編碼是將每個十進制數用一組4位二進制數來表示,因此,若將這種BCD碼直接交計算機去運算,由于
計算機總是把數當作二進制數來運算,所以結果可能會出錯。例:用BCD碼求38+49。
解決的辦法是對二進制加法運算的結果采用“加6修正,這種修正稱為BCD調整。即將二進制加法運算的結果修正為BCD碼加法運算的結果,兩個兩位BCD數相加時,對二進制加法運算結果采用修正規則進行修正。修正規則:
?。?)如果任何兩個對應位BCD數相加的結果向高一位無進位,若得到的結果小于或等于9,則該不需修正;若得到的結果大于9且小于16時,該位進行加6修正。
?。?)如果任何兩個對應位BCD數相加的結果向高一位有進位時(即結果大于或等于16),該位進行加6修正。
(3)低位修正結果使高位大于9時,高位進行加6修正。
下面通過例題驗證上述規則的正確性。
用BCD碼求35+21 BCD碼求25+37 用BCD碼求38+49 用BCD碼求42+95
用BCD碼求91+83 用BCD碼求94+7 用BCD碼求76+45
兩個組合BCD碼進行減法運算時,當低位向高位有借位時,由于”借一作十六“與”借一作十“的差別,將比正確的結果多6,所以有借位時,可采用”減6修正法“來修正。兩個BCD碼進行加減時,先按二進制加減指令進行運算,再對結果用BCD調整指令進行調整,就可得到正確的十進制運算結果。 實際上,計算機中既有組合BCD數的調整指令,也有分離BCD數的調整指令。另外,BCD碼的加減運算,也可以在運算前由程序先變換成二進制數,然后由計算機對二進制數運算處理,運算以后再將二進制數結果由程序轉換為BCD碼。
ASCII碼
ASCII碼是美國國家信息交換標準字符碼(American Standard Code for Information Interchange )的字頭縮碼。早期的ASCII碼采用7位二進制代碼對字符進行編碼。它包括32個通用控制字符,10個阿拉伯數字,52個英文大,小字母,34個專用符號共128個。7位ASCII代碼在最高位添加一個“0”組成8位代碼,正好占一個字節,在存儲和傳輸信息中,最高位常作為奇偶校驗位使用。擴展ASCII碼,即第八位不再視為校驗位而是當作編碼位使用。擴展 ASCII碼有256個。
bcd碼和ascii碼的區別簡單的打個比方~~~~例如十進制中的3的ascii碼為33H,小寫a和大寫A分別對應不同的ascii碼的值。而BCD碼是8421碼,例如在壓縮BCD碼中34H表示十進制中得34,64H表示十進制中得64,在非壓縮BCD碼中0304H表示十進制中得34,0506H表示十進制中的56. 通常ASCII碼用來在計算機種表示各種字符和字母,而BCD碼則用來方便的表示十進制數
BCD碼(Binary-Coded Decimal)二進碼十進數,是一種二進制的數字編碼形式,形式如:XXXXYYYY
通常是指8421碼,就是將十進制的數以8421的形式展開成二進制,大家知道十進制是0~9十個數組成,這十個數每個數都有自己的8421碼。
bcd碼是四位二進制碼, 也就是將十進制的數字轉化為二進制, 但是和普通的轉化有一點不同, 每一個十進制的數字0-9都對應著一個四位的二進制碼,對應關系如下: 十進制0 對應 二進制0000 ;十進制1 對應二進制0001 。。。。。。。 9 1001 接下來的10就有兩個上述的碼來表示 10 表示為00010000 也就是BCD碼是遇見1001就產生進位,不象普通的二進制碼,到1111才產生進位10000
壓縮BCD碼與非壓縮BCD碼的區別:
一個BCD碼占4位,而一個字節有8位。若把二個BCD碼放在一個字節中,就叫壓縮的BCD碼;
壓縮BCD碼的每一位用4位二進制表示,一個字節表示兩位十進制數。例如10010110B表示十進制數96D;
而一個字節只放一個BCD碼,高位置0,則叫非壓縮的BCD碼。
非壓縮BCD碼用1個字節表示一位十進制數,高四位總是0000,低4位的0000~1001表示0~9.例如00001000B表示十進制數8.
BCD碼只能代表數字0~9,ASCII碼中也有代表數字0~9的碼元,可以查看ASCII表,‘0’=48,‘1’=49,依次類推。
壓縮的BCD碼要轉換成兩個ASCII值,應該怎么轉換?
先把壓縮BCD拆開變成非壓縮BCD,然后加48就是ASCII中的0~9了!如:
1、BCD碼00110010,拆開得到:0011和0010
2、分別變成非壓縮BCD碼:00000011和00000010,得到十進制數字:3和2
3、看ASC表可以得出BCD碼0--9轉換為ASC碼為:48---58,所以對應ASC碼值為:51和50
另附ASCII 字符代碼表
評論
查看更多