TA的每日心情 | 开心 3 秒前 |
---|
签到天数: 1926 天 [LV.Master]无
|
本帖最后由 数值分析 于 2018-11-15 01:38 编辑 , Q& F# D: |/ V& V1 G5 X3 b) K
9 @! q3 e5 ]+ V; N9 n) T* U. u(这段是背景,暂时来不及写,待会儿再补上)
: q4 E' M" w j1 C, V( d B0 J/ W2 _7 F& Y6 P5 B
他这个就是所谓的“二-十进制编码”(Binary-Coded Decimal,BCD码)* O3 ^! d, ~2 E
7 o( d& Q) s' n
说人话,就是直接用一位16进制数字表示一位十进制数字。0 g$ b9 f1 R# L1 W5 \" q( T5 r
% F, g6 |+ X( F4 Q6 d( ~
比如77,如果直接换算成16进制应该是4D,但BCD码就用十六进制的77来表示。0 f. e' M2 `$ }
$ t4 R' o8 g3 P6 y9 K那么,这种编码有什么好处?4 x5 b, u! |" \8 H5 v" D
2 V. A6 ]& s* Y# C0 w# G2 q8 d" Y6 \ q+ |
8 m3 F# e6 Q, Q4 d
比方说吧 ,7在16进制里还是7,很好,很直观。你不需要计算器。
) `* q( g4 u. x0 T- h8 b, a! k但是77在16进制里应该是4D,这就不好了,不直观,看到4D你得找个计算器,不然不知道这个数字是多少。
/ x) z* X. Y5 ?/ I( D如果采用BCD码,77在16进制里还是77,多好,省一计算器。
. r. n7 F' j4 E/ U# r7 Z9 w% V6 a% T8 p
大家知道,4位二进制数字对应1位16进制数字+ s5 R h5 Z( e6 t/ V
下面请大家代入自己是码农(意味着你一眼看到0111就知道是7,看到0100就知道是4,看到1101就知道是0xD),如果你dump出一段BCD编码的内存,里边是01110111,,你马上就知的这说的是77。如果你dump出一段普通普通整型编码的内存01001101,你一眼只知道这等于4D,还得找个计算器才知道这个数是77.
' O; {& s1 i% Y+ D0 X r
/ g3 ~/ D* L- @- k- X当年不少数字电路是这么设计的(比如电子表)。每4位二进制可以直接接一个数码管做显示,直接表示一位十进制。比如 0000 0001 0010 0011,每4位直接接一个数码管,直接显示为为01:23,不需要解码电路。现在连个手表都高分屏了,早就没有人用这个了吧。一些早期程序也是这么设计的,这样存档文件可以直接用每位数字加48转成ascii码字符直接写出来,读回去的时候每个ascii字符减48就行。不用格式化字符串。兼顾了执行效率与人机交互性。现在没人在乎这点效率,也都没人用了吧。
/ u x6 h- W, `0 T Y
- k4 q" Y" r! ]' v; W说完了BCD码,但事情到这里还没有完,因位实际上清凉山每天贴出的是一个乘法结果,其实BCD码的弱项就是计算,特别是乘法。" C5 {( C N8 o! ^# u& Z" v1 \
5 M8 l& K' U! |* i* B2 L(未完待续,下面打算谈BCD码的计算问题) |
评分
-
查看全部评分
|