《计算机组成与体系结构(原书第4版)》 —2.6 字符编码

举报
华章计算机 发表于 2019/11/19 16:27:48 2019/11/19
【摘要】 本节书摘来自华章计算机《计算机组成与体系结构(原书第4版)》一书中第2章,第2.6.1节,作者是[美] 琳达·纳尔(Linda Null)朱莉娅·洛博(Julia Lobur)宾夕法尼亚州立大学,张 钢 魏继增 李雪威天津大学 李春阁 何 颖天津大学仁爱学院 译。

2.6 字符编码

我们已经看到数字计算机如何使用二进制系统来表示和操作数值。我们还没有考虑这些内部值如何转换为对人类有意义的表示。这种方式取决于计算机使用的编码系统和值如何被存储和检索。

2.6.1 二进制编码的十进制

对于许多应用程序,我们需要十进制系统的精确等效二进制数,这意味着我们需要对十进制数字的每位进行编码。在许多商业应用程序中处理钱数正是这种情况——在金融交易中,当我们将实数转换为浮点数时,我们不能承担舍入误差!

二进制编码的十进制(BCD)在电子学中非常普遍,特别是闹钟和计算器等显示数值数据的地方。BCD将十进制数的每位数字编码为4位二进制形式。每个小数数字被单独转换为等价的二进制数,如表2-5所示。例如,要编码146,则十进制数字将分别替换为0001、0100和0110。

因为大多数计算机使用字节作为最小的访问单位,因此大多数值存储在8位中,而不是4位。这给了我们存储4位BCD数的两个选择。我们可以忽略额外位的成本,并用零填充高阶半字节,或强制将每位十进制数字替换为8位。当使用这种方法时,146将存储为00000001 00000100 00000110。显然,这种做法是相当浪费的。第二种方法称为压缩BCD,每字节存储两位数。压缩的十进制格式允许数字有符号,不是将符号放在开始处而是把它存储在最后。这个“符号数字位”的标准值若为1100则代表+,1101代表-,1111表示值为无符号(见表2-5)。使用压缩十进制格式,+146将存储为00010100 01101100。偶数位的数字仍然需要填充。请注意,如果一个数字有一个小数点(与货币值一

表2-5 二进制编码的十进制

image.png

样),则它在BCD表示的数字中不存储,应该由应用程序保留。

BCD的另一个变换是区位十进制格式。区位十进制表示在每个字节的低位半字节中存储一个十进制数字,这与非压缩的十进制格式相同。但是,它不使用零的半字节填补高阶,而是使用特定的模式。称为数字区域的高阶半字节有两个选择。EBCDIC区位十进制格式要求该区域全部为1(即十六进制的F)。ASCII区位十进制格式要求区域为0011(十六进制为3)。(有关EBCDIC和ASCII的详细说明,请参阅接下来的两节。)两种格式都允许带有符号数字(使用表2-5中的符号数字),通常期望符号位于最低有效字节的高位半字节(尽管标记可能是一个完整的单独字节)。例如,在EBCDIC区位十进制格式中,+146是1111000111110100 11000110(注意,最后一个字节的高位半字节是符号)。在ASCII区位十进制格式中,+146是00110001 00110100 11000110。

注意表2-5中有6个未使用的可能的二进制值——1010~1111。虽然有将近40%的值浪费了,但我们在准确性上获得了相当大的优势。例如,当以二进制存储时,数字0.3是重复的十进制数。截断到8位分数时,它转换回0.296875,约有1.05%的误差。在EBCDIC区位十进制BCD中,数字直接存储为1111 0011(我们是假设数据格式暗示了小数点),根本不会出任何错误。

例2.37使用压缩BCD和EBCDIC区位十进制分别表示-1265。

1265的4位BCD表示是:

0001 0010 0110 0101

在低阶位后添加符号并在高阶位填充0000,我们有:

image.png

EBCDIC区位十进制表示需要4字节:

image.png

两个表示中的阴影部分为符号位。


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。