TA的每日心情 | 开心 2025-10-27 04:12 |
|---|
签到天数: 1953 天 [LV.Master]无
|
本帖最后由 数值分析 于 2018-11-15 01:38 编辑 6 J6 ^ m3 C K: m: q
" b1 F* y" p+ B9 [( N(这段是背景,暂时来不及写,待会儿再补上)0 I, L7 X0 Q. q( [0 i J. w
@9 b2 T) D7 X5 P
他这个就是所谓的“二-十进制编码”(Binary-Coded Decimal,BCD码)1 `6 D2 Z$ T# e# `# I
" R5 d, }4 h# \! C$ D$ j0 K
说人话,就是直接用一位16进制数字表示一位十进制数字。
8 ?6 v- m2 m$ q" \
/ R; q% q, [. z! U% h4 H比如77,如果直接换算成16进制应该是4D,但BCD码就用十六进制的77来表示。
8 n h7 d, r" R. O- [/ Z( F0 {+ O3 `- H9 E+ e0 ~2 G
那么,这种编码有什么好处?; k1 f8 K( _4 u8 y
! v4 v1 t0 `8 G# ^* }
7 q! i( x* J+ B2 M0 Z
6 M c) p6 H8 _# x' L9 S$ v! I4 Q6 f比方说吧 ,7在16进制里还是7,很好,很直观。你不需要计算器。
+ \" {* A4 J2 O但是77在16进制里应该是4D,这就不好了,不直观,看到4D你得找个计算器,不然不知道这个数字是多少。
$ A7 b: e/ P' X, F( y1 {* ]" v& W如果采用BCD码,77在16进制里还是77,多好,省一计算器。
2 k4 s8 G* B: O l+ E& U% w" G
+ {! N2 Q0 |8 z0 W6 Q. N大家知道,4位二进制数字对应1位16进制数字
8 m" p' V7 M* C' P: U下面请大家代入自己是码农(意味着你一眼看到0111就知道是7,看到0100就知道是4,看到1101就知道是0xD),如果你dump出一段BCD编码的内存,里边是01110111,,你马上就知的这说的是77。如果你dump出一段普通普通整型编码的内存01001101,你一眼只知道这等于4D,还得找个计算器才知道这个数是77.1 E$ M, @: W8 Y2 h" E
! B) ]+ w9 h* f' ~/ B6 T( E+ F
当年不少数字电路是这么设计的(比如电子表)。每4位二进制可以直接接一个数码管做显示,直接表示一位十进制。比如 0000 0001 0010 0011,每4位直接接一个数码管,直接显示为为01:23,不需要解码电路。现在连个手表都高分屏了,早就没有人用这个了吧。一些早期程序也是这么设计的,这样存档文件可以直接用每位数字加48转成ascii码字符直接写出来,读回去的时候每个ascii字符减48就行。不用格式化字符串。兼顾了执行效率与人机交互性。现在没人在乎这点效率,也都没人用了吧。9 \& {" H3 u3 x$ ^& k% `; G- O/ n
% M1 ^+ N! S0 _; f: P! k$ B1 o说完了BCD码,但事情到这里还没有完,因位实际上清凉山每天贴出的是一个乘法结果,其实BCD码的弱项就是计算,特别是乘法。
L+ e R1 b; F5 V* ~2 P& a& D$ O* r/ S* q( d5 A5 e: ~3 t
(未完待续,下面打算谈BCD码的计算问题) |
评分
-
查看全部评分
|