计算机组成与体系结构第二章——数据的机器级表示

数值数据的表示

信息的二进制编码

机器级数分为两大类:
1.数值数据:无符号整数、带符号整数、浮点数(实数)、十进制数
2.非数值数据:逻辑数(包括位串)、西文字符和汉字
计算机内部所有信息都用二进制进行编码
用二进制编码的原因:
1.制造二个稳定态的物理器件容易
2.二进制编码、计数、运算规则简单
3.正好与逻辑命题对应,便于逻辑运算,并可方便地用地逻辑电路实现
真数和机器数:
机器数:用0和1编码的计算机内部的0/1序列
真值:机器数真正的值,即:现实中带正负号的数

数值数据的表示

数值数据表示的三要素:
1.进位计数制
2.定、浮点表示
3.如何用二进制编码
在这里插入图片描述在这里插入图片描述

机器数

一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.

比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。

那么,这里的 00000011 和 10000011 就是机器数。

真值

因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

原码

原码就是符号位加上真值的绝对值, 即用第一位表示符号, 其余位表示值. 比如如果是8位二进制:

[+1]原 = 0000 0001

[-1]原 = 1000 0001

第一位是符号位. 因为第一位是符号位, 所以8位二进制数的取值范围就是:
[1111 1111 , 0111 1111]

[-127 , 127]

反码

反码的表示方法是:

正数的反码是其本身

负数的反码是在其原码的基础上, 符号位不变,其余各个位取反.

[+1] = [00000001]原 = [00000001]反

[-1] = [10000001]原 = [11111110]反

可见如果一个反码表示的是负数, 人脑无法直观的看出来它的数值. 通常要将其转换成原码再计算.

补码

补码的表示方法是:

正数的补码就是其本身

负数的补码是在其原码的基础上, 符号位不变, 其余各位取反, 最后+1. (即在反码的基础上+1)

[+1] = [00000001]原 = [00000001]反 = [00000001]补

[-1] = [10000001]原 = [11111110]反 = [11111111]补

对于负数, 补码表示方式也是人脑无法直观看出其数值的. 通常也需要转换成原码在计算其数值.

现在我们知道了计算机可以有三种编码方式表示一个数. 对于正数因为三种编码方式的结果都相同:

[+1] = [00000001]原 = [00000001]反 = [00000001]补

所以不需要过多解释. 但是对于负数:

[-1] = [10000001]原 = [11111110]反 = [11111111]补

在这里插入图片描述

无符号整数

在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

第一讲小结

在机器内部编码后的数称为机器数,其值称为真值
定义数值数据有三个要素:进制、定点/浮点、编码
整数的表示
无符号数:正整数,用来表示地址等;带符号整数:用补码表示
C语言中的整数
无符号数:unsigned int ( short / long);带符号数: int ( short / long)
浮点数的表示
符号;尾数:定点小数;指数(阶):定点整数(基不用表示)
浮点数的范围
正上溢、正下溢、负上溢、负下溢;与阶码的位数和基的大小有关
浮点数的精度:与尾数的位数和是否规格化有关
浮点数的表示(IEEE 754标准):单精度SP(float)和双精度DP(double)
规格化数(SP):阶码1~254,尾数最高位隐含为1
“零” (阶为全0,尾为全0)
∞ (阶为全1,尾为全0)
NaN (阶为全1,尾为非0)
非规格化数 (阶为全0,尾为非0,隐藏位为0)(P.42倒数第9行说明)
十进制数的表示:用ASCII码或BCD码表示

非数值数据、数据排列、纠/检错

逻辑数据的编码表示

表示

用一位表示,例如:真:1/假:0
N位二进制数表示N个逻辑数据,或一个位串

运算

按位进行
按位与/按位或/逻辑左移/逻辑右移

识别

逻辑数据和数值数据在形式上并无差别,也是一串0/1序列,机器靠指令来识别。

位串

用来表示若干个状态位或控制位(OS中使用较多)

西文符号的编码表示

特点

是一种拼音文字,用有限几个字母可拼写出所有单词
只对有限个字母和数学符号、标点符号等辅助字符编码
所有字符总数不超过256个,使用7或8个二进位可表示

表示

十进制数字:0/1/2…/9
英文字母:A/B/…/Z/a/b/…/z
专用符号:+/-/%/*/&/……
控制字符(不可打印或显示)

操作

字符串操作,如:传送/比较

汉字及国际字符的编码表示

特点

汉字是表意文字,一个字就是一个方块图形。
汉字数量巨大,总数超过6万字,给汉字在计算机内部的表示、汉字的传输与交换、汉字的输入和输出等带来了一系列问题。

编码形式

输入码:对汉字用相应按键进行编码表示,用于输入
内码:用于在系统中进行存储、查找、传送等处理
字模点阵或轮廓描述:描述汉字字模点阵或轮廓,用于显示或者打印
输入:向计算机输入汉字的方式:
① 手写汉字联机识别输入,或者是印刷汉字扫描输入后自动识别,这两种方法现均已达到实用水平。
② 用语音输入汉字,虽然简单易操作,但离实用阶段还相差很远。
③ 利用英文键盘输入汉字:每个汉字用一个或几个键表示,这种对每个汉字用相应按键进行的编码称为汉字“输入码”,又称外码。输入码的码元为按键。是最简便、最广泛的汉字输入方法。
常用的方法有:搜狗拼音、五笔字型、智能ABC、微软拼音等
使用汉字输入码的原因:
① 键盘面向西文设计,一个或两个西文字符对应一个按键,非常方便。
② 汉字是大字符集,专门的汉字输入键盘由于键多、查找不便、成本高等原因而几乎无法采用。

问题:西文字符常用的内码是什么?
对于汉字内码的选择,必须考虑以下几个因素:
① 不能有二义性,即不能和ASCII码有相同的编码。
② 尽量与汉字在字库中的位置有关,便于汉字查找和处理。
③ 编码应尽量短。
国标码(国标交换码)
1981年我国颁布了《信息交换用汉字编码字符集·基本集》(GB2312—80)。该标准选出6763个常用汉字,为每个汉字规定了标准代码,以供汉字信息在不同计算机系统间交换使用
可在汉字国标码的基础上产生汉字机内码

GB2312-80字符集

由三部分组成:
① 字母、数字和各种符号,包括英文、俄文、日文平假名与片假名、罗马字母、汉语拼音等共687个
② 一级常用汉字,共3755个,按汉语拼音排列
③ 二级常用汉字,共3008个 ,不太常用,按偏旁部首排列
汉字的区位码
码表由94行、94列组成,行号为区号,列号为位号,各占7位
指出汉字在码表中的位置,共14位,区号在左、位号在右
汉字的国标码
每个汉字的区号和位号各自加上32(20H),得到其“国标码”
国标码中区号和位号各占7位。在计算机内部,为方便处理与存储,前面添一个0,构成一个字节

汉字内码

至少需2个字节才能表示一个汉字内码。为什么?
由汉字的总数决定!
可在GB2312国标码的基础上产生汉字内码
为与ASCII码区别,将国标码的两个字节的第一位置“1”后得到一种汉字内码
例如,汉字“大”在码表中位于第20行、第83列。因此区位码为0010100 1010011,国标码为00110100 01110011,即3473H。前面的34H和字符“4”的ACSII码相同,后面的73H和字符“s”的ACSII码相同,将每个字节的最高位各设为“1”后,就得到其内码:B4F3H (1011 0100 1111 0011B),因而不会和ASCII码混淆。

国际字符集

国际字符集的必要性
不同地区使用不同字符集内码,如中文GB2312 / Big5、日文Shift-JIS / EUC-JP等。在安装中文系统的计算机中打开日文文件,会出现乱码。
为使所有国际字符都能互换,必须创建一种涵盖全部字符的多字符集。
国际多字符集
通过对各种地区性字符集规定使用范围来唯一定义各字符的编码。
国际标准ISO/IEC 10646提出了一种包括全世界现代书面语言文字所使用的所有字符的标准编码,有4个字节编码(UCS-4)和2字节编码(UCS-2) 。
我国(包括香港、台湾地区)与日本、韩国联合制订了一个统一的汉字字符集(CJK编码),共收集了上述不同国家和地区共约2万多汉字及符号,采用2字节编码 (即:UCS-2) ,已被批准为国家标准(GB13000 )。
Windows操作系统(中文版)已采用中西文统一编码,收集了中、日、韩三国常用的约2万汉字,称为“Unicode”,采用2字节编码,与UCS-2一致

汉字的字模点阵码和轮廓描述

为便于打印、显示汉字,汉字字形必须预先存在机内
字库 (font):所有汉字形状的描述信息集合
不同字体 (如宋体、仿宋、楷体、黑体等) 对应不同字库
从字库中找到字形描述信息,然后送设备输出
问题:如何知道到哪里找相应的字形信息?
汉字内码与其在字库中的位置有关!!
字形主要有两种描述方法:
字模点阵描述(图像方式)
轮廓描述(图形方式)
直线向量轮廓
曲线轮廓(True Type字形)

数据的基本宽度

比特是计算机中处理、存储、传输信息的最小单位
二进制信息的计量单位是“字节”(Byte),也称“位组”
现代计算机中,存储器按字节编译
字节是最小可寻址单位
如果以字节为一个排列单位,则LSB表示最低有效字节,MSB表示最高有效字节
除比特和字节外,还经常使用“字”作为单位
“字”和 “字长”的概念不同
“字长”指定点运算数据通路的宽度。
(数据通路指CPU内部数据流经的路径以及路径上的部件,主要是CPU内部进行数据运算、存储和传送的部件,这些部件的宽度基本上要一致,才能相互匹配。因此,”字长”等于CPU内部总线的宽度、运算器的位数、通用寄存器的宽度等。 )
“字”表示被处理信息的单位,用来度量数据类型的宽度。
字和字长的宽度可以一样,也可不同。
例如,x86体系结构定义“字”的宽度为16位,但从386开始字长就是32位了。

数据量的度量单位

存储二进制信息时的度量单位要比字节或字大得多
容量经常使用的单位有:
“千字节”(KB),1KB=210字节=1024B
“兆字节”(MB),1MB=220字节=1024KB
“千兆字节”(GB),1GB=230字节=1024MB
“兆兆字节”(TB),1TB=240字节=1024GB
通信中的带宽使用的单位有:
“千比特/秒”(kb/s),1kbps=103 b/s=1000 bps
“兆比特/秒”(Mb/s),1Mbps=106 b/s =1000 kbps
“千兆比特/秒”(Gb/s),1Gbps=109 b/s =1000 Mbps
“兆兆比特/秒”(Tb/s),1Tbps=1012 b/s =1000 Gbps

高级语言支持多种类型、多种长度的数据
例如,C语言中char类型的宽度为1个字节,可表示一个字符(非数值数据),也可表示一个8位的整数(数值数据)
不同机器上表示的同一种类型的数据可能宽度不同
程序中的数据有相应的机器级表示方式和相应的处理指令

数据的存储和排列顺序

码字和码距

由若干位代码组成的一个字叫“码字”
两个码字中具有不同代码的位的个数叫这两个码字间的“距离”
码制中各码字间最小距离为“码距”,它就是这个码制的距离。
  问题:“8421”码的码距是几?
2(0010)和3(0011)间距离为1,“8421”码制的码距为1。
数据校验中“码字”指数据位和校验位按某种规律排列得到的代码
码距与检错、纠错能力的关系(当d≤4)
  ① 若码距d为奇数,则能发现d-1位错,或能纠正(d-1)/2位错。
  ② 若码距d为偶数,则能发现d/2位错,并能纠正(d/2-1)位错。
常用的数据校验码有:
  奇偶校验码、海明校验码、循环冗余校验码。

奇偶校验码

基本思想:增加一位奇(偶)校验位并一起存储或传送,根据终部件得到的相应数据和校验位,再求出新校验位,最后根据新校验位确定是否发生了错误。
 实现原理:假设数据B=bn-1bn-2…b1b0从源部件传送至终部件。在终部件接收到的数据为B’=bn-1’bn-2’…b1’b0’。
 第一步:在源部件求出奇(偶)校验位P。
   若采用奇校验,则P=bn-1⊕bn-2 ⊕…⊕b1⊕b0⊕1。
   若采用偶校验,则P=bn-1⊕bn-2 ⊕…⊕b1⊕b0。
 第二步:在终部件求出奇(偶)校验位P’。
   若采用奇校验,则P’= bn-1’⊕bn-2 ’⊕…⊕b1’⊕b0’⊕1。
   若采用偶校验,则P’=bn-1’⊕bn-2 ’⊕…⊕b1’⊕b0’。
 第三步:计算最终的校验位P*,并根据其值判断有无奇偶错。
  假定P在终部件接受到的值为P’’,则P*= P’⊕P”
  ① 若P*=1,则表示终部件接受的数据有奇数位错。
  ② 若P*=0,则表示终部件接受的数据正确或有偶数个错。

奇偶校验法的特点

问题:奇偶校验码的码距是几?为什么?
码距d=2。
在奇偶校验码中,若两个数中有奇数位不同,则它们相应的校验位就不同;若有偶数位不同,则虽校验位相同,但至少有两位数据位不同。因而任意两个码字之间至少有两位不同。
特点
根据码距和纠/检错能力的关系,它只能发现奇数位出错,不能发现偶数位出错,而且也不能确定发生错误的位置,不具有纠错能力。
开销小,适用于校验一字节长的代码,故常被用于存储器读写检查或按字节传输过程中的数据校验
因为一字节长的代码发生错误时,1位出错的概率较大,两位以上出错则很少,所以可用奇偶校验。

海明校验码

由Richard Hamming于1950年提出,目前还被广泛使用。
主要用于存储器中数据存取校验。
基本思想:奇偶校验码对整个数据编码生成一位校验位。因此这种校验码检错能力差,并且没有纠错能力。如果将整个数据按某种规律分成若干组,对每组进行相应的奇偶检测,就能提供多位检错信息,从而对错误位置进行定位,并将其纠正。
海明校验码实质上就是一种多重奇偶校验码。
处理过程:
最终比较时按位进行异或,以确定是否有差错。
这种异或操作所得到的结果称为故障字(syndrome word)。显然,校验码和故障字的位数是相同。

每一组一个校验位,校验码位数等于组数!
每一组内采用一位奇偶校验!

校验码位数的确定

假定数据位数为n,校验码为k位,则故障字位数也为k位。k位故障字所能表示的状态最多是2K,每种状态可用来说明一种出错情况。
若只有一位错,则结果可能是:
数据中某一位错 (n种可能)
校验码中有一位错 (k种可能)
无错 ( 1 种可能)
假定最多有一位错,则n和k必须满足下列关系:
2K≥1+n+k, 即:2K-1≥n+k
有效数据位数和校验码位数间的关系
当数据有8位时,校验码和故障字都应有4位。
说明:4位故障字最多可表示16种状态,而单个位出错情况最多只有12种可能(8个数据位和4个校验位),再加上无错的情况,一共有13种。所以,用16种状态表示13种情况应是足够了。
p70

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值