BCD编码在程序处理用美元和美分表示的钱款、账户时特别有用。银行和保险公司是非常典型的两类整日与钱打交道的机构,这些机构所使用的计算机程序中,大多数小数所占用的存储空间仅仅相当于两个十进制数所占用的位数。
通常把两个BCD数字存放在一个字节,这种方式称为压缩 BCD(packed BCD)。由于2的补数不和BCD数一起使用,因此压缩BCD通常需要增加1位用来标识数的正负,该位被称做符号位(signbit)。用一整个字节保存某个特定的BCD数是很方便的,但要为这个短小的符号位牺牲4位或8位的存储空间。
让我们来看一个例子,假设计算机程序所要处理的钱款数目在+/-100万美元之间,这就意味着,需要表示的钱的数目的范围是-9,999,999.99\~99,999,999.99,因此保存在存储器中的每一笔钱的金额都需要5个字节。因此,-4,325,120.25可以表示为下面5个字节:
00010100 00110010 01010001 00100000 00100101
将每个字节转换成十六进制数,上面的数可以等价地表示成:
14h 32h 51h 20h 25h
注意,最左边的半个字节所构成的1用来指明该数是负数,这个1即符号位。如果这半个字节所构成的数是0,则说明该数是正数。组成该数的每一个数字都需要用4位来表示,从十六进制的表示形式中可以很直观地看到这一点。
如果要表示的数的范围扩大到-99,999,999.99\~99,999,999.99,则我们需要用6个字
23 定点数和浮点数
369