数据的表示、运算与校验
数制及其相互转换
数制的基与权
在任一数制中,每一个数位上允许使用的记数符号的个数称为该数制的基数
每1位都对应1个表示该位在数码中的位置的值,这个值就称为数位的权值W
例:
128[10] W = 10^2
1101[2] W = 2^3
常用的几种进位制
2进制:0、1
8进制:0、1、2、3、4、5、6、7
16进制:0、……、9、A、B、C、D、E、F
进制之间的转换
例:
原码反码和补码
数的符号表示规则
“0”表示正号“+”,“1”表示负号“—”
原码
一个二进制数,用0-1代码表示符号,数值位不变就得到与改二进制数真值对应的原码
例:
字长为8位的原码
表示范围:-127~+127 2^7-1
数值“0”有两种原码形式
[+0] = 0 0000000
[-0] = 1 0000000
反码
正数情况
例:
负数情况
符号位保持为“1”,数值位分别“按位取反”
例:
字长8位的反码
表示范围:-127~+127 2^7-1
数值“0”有两种反码形式
[+0] = 0 0000000
[-0] = 1 1111111
补码
补码的编码规则
对于正数(字长8位)
对于负数(字长8位)
符号位礽保持为“1”
其余各数位“按位取反,末尾再加1”
字长8位的补码
表示范围:-128~+127
注意
补码比原码和反码多表示1个负值,即-128
数值“0”只有1钟补码形式
原码补码转换及变补
已知原码求补码
例:
已知补码求原码
补码再求补码就是原码
例:
求补(常见于减法运算)
即已知补码,求该数负数的补码
[X]补的代码连同符号位一起变反,末位再加1,即得到[-X]补
例:
移码的表示规则
移(增)码
移码通常用于表示浮点数的阶码
阶码一般是整数,故移码通常只用于表示整数
对定点整数X,它的移码是:
上述规则等价于将X正向平移或者增加2^(n-1),因此称之为移码或增码
例:
移码表示范围与补码一致,0也只有1个移码
正数:将原码符号位变反,即可得到移码
负数:将原码连同符号位一起变反,末位再加1,即得到移码(与变补等效)
补码和移码符号相反、数值相同
数的定点表示法
定点数
数的小数点固定在同一位置不变
带符号的定点小数
约定所有数的小数点的位置,固定在符号位之后
带符号的定点整数
小数点的位置固定在最低数值之后
无符号的定点整数
小数点的位置固定在最低数值之后
字长8位的定点数的表示范围
数的浮点表示原理
浮点表示中,小数点的位置可按需浮动
格式模型
引入浮点数的意义
例:
浮点数的机器(存储)格式
浮点数真值
R:阶码的底数,隐含约定为2
E:阶码,定点整数,补码或移码表示,其位数决定了数值的范围
M:尾数,为定点小数,原码或补码表示,其位数决定着数的精度;数符表示数的正负
浮点数的尾数规格化
规格化的目的→使浮点数的表示代码“唯一”
科学计数法约定:1≤| M | < 10
浮点数用原码表示
1/2 ≤| M | < 1
浮点数用补码表示时
例:
IEEE754格式浮点数
有32 位浮点数(单精度)和64位浮点数(双精度)
32位短浮点数
在上述的表示格式中:
S = 浮点数的符号位,0表示正数,1表示负数
E = 阶码,8位,采用移码表示,阶符隐藏
M = 尾数,23位,纯小数表示,且真值 = 1+M
阶码E采用移码形式,但只偏移2^7 -
64位长浮点数
在上述的表示格式中:
S = 浮点数的符号位,0表示正数,1表示负数
E = 阶码,11位,采用移码表示,阶符隐藏
M = 尾数,52位,纯小数表示
阶码E采用移码形式,但只偏移2^10 - 1
补充说明
例:
英文字符—ASCII码
字符总数128
包含数字0~9,大小写英文字母,运算符,标点符号,标识符,格式控制符
代码宽度:7b
存储宽度:7b(有效位)+ 1b(奇偶校验位)= 8b = 1B
ASCII码示例
数字型
字符型
其他类型
中文字符—汉字码
汉字输入码
数字码,拼音码,字形码
数字输入码
常用的是国际区位码,用数字串代表汉字
将6763个二级汉字分为94个区,每区94位,把汉字表示成二维数组,数组下标就是区位码
优缺点
无重码,输入码与内部码的转换方便,代码难以记忆
例:
拼音输入码
以汉字拼音为基础的输入法
优缺点
简单方便
同音字多,重码率高,影响输入速度
字形输入码
根据汉字的书写形状来进行编码(五笔)
优缺点
简单方便,符号书写习惯
重码率高,需要记住字形结构
汉字的内码
用于汉字信息的存储、交换、检索等操作的计算机内代码,一般用两个字节表示
机内码的基础是国标码
国标码
10进制区位码转换为16进制,再加2020H
机内码
国际码+8080H(与ASCII区别),或者区位码转成16进制+A0A0H
例:
汉字字模码
用点阵表示的汉字字形代码,是汉字的输出形式
例:
特别说明:
字模点阵用来构成汉字字库,并非机内存储
字库中存储每个汉字的点阵代码,用于汉字的显示输出或打印输出
当显示输出或打印输出时才检索字库,输出字模点阵,得到字形
汉字的输入码、内码、字模码分别是用于计算机输入、内部处理、输出三种不同用途的编码
各有各的用途,不能混为一谈
移位操作
逻辑移位、算术移位
逻辑移位
数码位置变化
例:
算术移位
符号位不变,数码位置变化
例:
正数补码\原码位移规则
移位规则
数符不变(单符号位:符号位不变:双符号位:第1符号位不变)
空位补0(右移时第2符号位移至尾数最高位)
例:
负数补码移位
移位规则
数符不变(单符号位:符号位不变:双符号位:第1符号位不变)
左移空位补0
右移空位补1(第二符号位移至尾数最高位)
例:
易错点
舍入与拓展操作
舍入方法
0舍1入(原码、补码)
例:
末尾恒置1(原码、补码)
例:
数位扩展与压缩
符号扩展
直接把符号位(0/1)填充到拓展位
例:
0—扩展
高位均全补0 (针对无符号数)
例:
位数压缩(有损压缩)
弃高位、留低位
例:
存储模式与对齐
数据存储
小端模式
小地址单元存储数据的低位(即尾端)
例:
大端模式
大地址单元存储数据的低位(即尾端)
例:
数据字的对齐
要求数据的地址是相应的边界地址
按边界对齐(假定存储字宽度为32位,按字节编址,字长32位)
字地址:4的倍数(低两位为0)
半字地址:2的倍数(低位为0)
字节地址:任意
不按边界对齐
例:
定点运算—补码加减1(运算与控制)
补码的加减法
科学依据
例:
补码表示与变补运算的区别
例:
补码加减运算流程
逻辑实现
定点运算—补码加减2(溢出判断)
溢出规则
例:
硬件判断逻辑一(根据SA、SB与Sf的关系)
例:
硬件判断逻辑二(根据Cf与C的关系)
例:
硬件判断逻辑三(从双符号位)(Sf1与Sf2相同无溢出)
例:
定点运算—原码加减
原码加减法
符号位单独处理、数值位加减
先比较两数符号
加法:同号数值位求和,异号求差
减法:异号数值位求和,同号求差
求和时:数值位想加,和的符号取被加数(被减数)符号
若最高位产生进位,则结果有溢出
求差时:被加数(被减数)与加数(减数)求补后相加
最高数值位有进位,相加结果为正,数值位正确;符号取被加数(被减数)的符号
最高数值位无进位,相加结果为负,得到数值位的补码,需对结果求补还原为绝对值形式的数值位;符号位与被加数(被减数)的符号相反
例:
定点运算—标准移码加减
符号位和数值部分一起处理
两数移码的加减等于两数加减后表示成的补码
补码和移码:符号位相反、数值位相同
移码加减规则
溢出判断
进行模2^n相加时,如果两个加数与和数符号全相同,则发生了溢出
例:
定点运算—原码一位乘法1(乘法原理)
原码乘法→部分积累加、移位
例:
手工运算
乘法原理
每次将1位乘数所对应的部分积与原部分积的累加和相加,并移位
设置寄存器
A:存放部分积累加和、乘积高位
B:存放被乘数
C:存放乘数、乘积低位
设置初值
A:00.0000
B:|X| = 00.1101
C:|Y| = .1011
操作
定点运算—原码一位乘法2
算法流程
32位硬件逻辑方案
定点运算—补码一位乘法
Booth(比较法)
例:
定点运算—补码除法(不恢复余数)
算法思想(|X|<|Y|)
被除数X补、除数Y补、余数ri,i=0、1……
初始化
令r0 = X补,比较r0与Y补符号,同号上商1,异号上商0
循环
i=1……n,按下表条件决定每步操作
商修正
符号位+1,末尾恒置1
余数修正:
例:
浮点运算—阶码的加减(非标准移码)
阶码用非标准移码表示(仅偏移2^(n-1)-1 = 127)
例:
浮点数运算—IEEE加减1(算法原理)
检测能否简化操作
计算阶差
对阶
尾数加减
结果规范化
溢出判断
左规(阶码-1)时
左规时:先判断阶码是否全0,若是,则直接置阶码下溢;否则,阶码减1后判断阶码是否为全0,若是,则阶码下溢
右规(阶码+1)时
右规时:先判断阶码是否全1,若是,则直接置阶码上溢;否则,阶码加1后判断阶码是否为全1,若是,则阶码上溢
浮点数运算—IEEE754加减2(运算举例)
例:
浮点数运算—IEEE754乘除
浮点乘法→分解成:移码加法、原码乘法
运算步骤
求阶和AE+BE
尾数相乘
结果规格化。不需左规,最多右规1次
其他处理
舍入、置0、阶码溢出判断
浮点除法→分解成:移码减法、原码除法
运算步骤
求阶差AE-BE
尾数相除
结果规格化。不需右规,最多左规1次
其他处理
舍入、置0、阶码溢出判断
奇偶校验
编码规则
增设1位校验位,从而使1的个数是奇或偶数
例:
偶校验电路逻辑
海明校验
是一种多重分组奇偶校验;将代码组织为若干分组,每组进行奇偶校验
能够检验是否出错,也能定位出错位
例:
海明编码时:各组单独进行奇偶校验编码,以确定各组的校验位
代码检验时:每组能产生1个指误码
r位指误码 :G3G2G1G0
2^r种可能的指误码:0000、0001、0010
指误码全为0==海明编码无错
其余(2^r-1)种指误代码
分别用于指示(2^r-1)种只有1位错的情况
各参数应满足
若K = 4,则r ≥ 3 满足上述定理,可组成7位海明码
分组方法
有效信息:A1A2A3A4,校验位:P1P2P3,偶校验方式
编码规则
每组均采用偶校验,填入校验位,组内具有偶数个1
例:
检错与纠错
例:
循环冗余校验-编码方法
校验原理
用待校验数据除以某个约定代码,能除尽则表明数据正确,否则通过循环移位校正出错位
编码方法
将待编码的k位有效数据M(x)左移r位得到全编码多项式M(x)·x^r,空出r位,以装填r位余数
选取一个r+1位的生成多项式G(x),对M(x)·x^r进行模2除运算,得到商Q(x)和余数R(x)的代码
将左移r位的待编码信息,与余数R(x)模2加,可拼接成为包含有效数据在内的CRC编码
例:
生成多项式G(x)的说明
不同的G(x),产生不同的余数特性
G(x)的最高位和最低位必须为1
CRC码中任何1位出错,根据G(x)得到的余数不为全0
不同数位发生错误,G(x)得到的余数互不相同
余数继续做模2运算,应能使余数循环出现
补充
循环冗余校验—余数特征
CRC余数的特性分析(最多1位出错)
例:
CRC余数特性归纳
最多有1位数据出错时
余数为全0时,数据无错
余数非全0时,数据有错,且余数与出错位存在“一一对应”关系,余数001对应最低位出错的模式
相邻两个非0余数,对应的出错位也相邻
任何一个非0余数,循环执行余数低位补0应重新计算余数,余数会循环出现,对应的出错位也在随之循环左移,循环周期T=2^r-1
循环冗余校验—循环纠错
CRC的检错和纠错
例:
纠错方法的特点