本章知识框架图
知识点
-
进制转换:整数部分用除基取余法(倒叙取余),小数部分用乘基取余法(正序取余),最后将整数和小数部分拼接起来。
-
BCD码有8421码、余3码和2421码。
-
7位二进制编码的ASCII码,0~31为控制字符,32为空格SP,127为DEL码,48~57为数字,32~126为95个可印刷字符,共128个字符。
-
海明码(数据m位,校验码p位):
-
若想指出任意一位错误,校验码p必须满足:2^p - 1 ≥ m + p。
-
校验码放在2^n(n=0、1、2…)位置上,数据顺填。
-
根据奇偶校验规则填写校验码。
-
传输后复原校验码和数据位,并添加一列纠错码(如:e1、e2、e3),按行奇偶校验填写纠错码(p位和m位同时参与校验)。
-
纠错码逆序(如:e3、e2、e1),即为发生误码的位置。
PS:海明码能够纠正一位错误,或检测两位错误(此时需要再添加一位检测位)。
-
-
CRC循环冗余校验码使用方法:
-
在待发送信息m后添加n个0(n为多项式的最高次幂)作为被除数,除数为多项式的系数的存在情况(如:x^2+1对应的除数就是101),进行异或运算。
-
最后得到余数r(余数的位数等于多项式的最高次n,位数不够要在前面补0)。
-
最终发出的信息为原信息m和余数r的拼接结果。
-
将接收方接收到的信息m作为被除数,多项式的系数作除数,进行异或运算。
-
最终结果余数为0说明没有产生误码,否则产生了误码。
-
纠错时用到的模二除法暂时跳过。
PS:CRC可以校验或纠正一位或多位错误,由多项式决定(一般情况下CRC只能检测不能纠正,因为纠正算法过于复杂)。
-
-
CRC循环冗余校验码重要特性:
- 具有r检测位的多项式能够检测出所有长度小于等于r的突发错误。
- 长度大于r+1的错误逃脱的概率是1/2^r。
-
定点小数(约定小数点在最高位之前):
- 最大正数:符号位为0,尾数均为1,真值等于1 - 2^(-n)。
- 最小正数:符号为为0,尾数最后一位为1其余均为0,真值等于2^(-n)
- 最小负数(原码):符号位为1,尾数均为1,真值等于 - [1 - 2^(-n)]
- 最大负数(原码):符号为为1,尾数最后一位为1其余均为0,真值等于-2^(-n)
-
定点整数(约定小数点在最低位之后)
-
机器数:
-
原码:用机器数的最高位表示该数的符号,其余的各位表示数的绝对值(注意小数和整数的范围不同但都关于原点对称)
-
反码:正数的反码是它本身,负数的反码是在其原码的基础上,符号位不变,其余各个位取反。
-
补码:正数的补码是它本身,负数的补码是在其原码的基础上,符号位不变,其余各个位取反,最后+1(即在反码的基础上+1)。
-
移码:移码常用来表示浮点数的阶码,它只能表示整数,对0的表示是唯一的。补码的符号位取反即得移码(可以直观的看出数的大小)。
机器数 表示范围 原码 -127~127 反码 -127~127 补码 -128~127(多一个负数) PS:当使用补码表示时,如果符号位相同,则数值位越大,码值越大。
-
-
定点数的位移运算
- 算数位移(有符号,符号不参与位移):
- 对正数:原码、补码、反码都补0。
- 对负数:原码补0,反码补1,补码“左原右反,左零右一”(左移与原码相同补0,右移与反码相同补1)。
- 逻辑位移(无符号,符号参与位移):左移丢高位补0,右移丢低位补0。
- 循环位移(将移出的位放到高/低位):
- 大循环位移:带进位标志位CF的循环位移。
- 小循环位移:不带进位标志符的循环位移。
- 算数位移(有符号,符号不参与位移):
-
溢出:指运算结果超过了数的表示范围,仅当同号数相加或两个异号数相减时才可能产生溢出。
-
溢出判断方法(补码定点数加减运算):
- 一位符号位法:只要参加运算的两个符号数相同,结果又与原操作数不同,判断为溢出。
- 双符号位法(模4补码、变形补码):符号位00表示正,11表示负,两个符号位都参加运算,运算结果的最高位符号位代表真正的符号。若运算结果的两个符号位相同表示未溢出(00表示结果为正且无溢出,11表示结果为负且无溢出),不同表示溢出(01代表正溢出、10代表负溢出)。
- 一位符号位根据进位情况判断溢出法:符号位的进位与数值最高位的进位相同则无溢出,否则溢出。
-
定点数的加减法法运算:
- 加法运算:[A + B]补 = [A]补 + [B]补
- 减法运算:[A - B]补 = [A]补 + [-B]补
- mod 2^(n+1)(整数),mod 2(小数)n为机器字长,用于去除最高位进位。
-
定点数的乘法运算:
(此处略难,请参《408天勤-强化班-组成原理-第二章-05-定点数的乘法运算》的视频讲解)
-
原码一位乘:将乘法转换为加法和右移操作,符号位单独处理,数值部分按绝对值计算。
-
补码一位乘(Booth算法):
- 被乘数X与乘数Y均为补码,结果为积的补码。
- 部分积和被乘数用双符号位,乘数用单符号位。
- 初始部分积为0,运算前,在乘数Y的补码末位添加一位附加位0(放入MQ末尾)。
- 运算时,若MQ的次低位减去最低位等于1则加[-A]补;若等于-1则加上[A]补;若等于0则加上0。
- 每次加法操作后都要右移一位。累加n+1次,右移n次,最后一次只求和不移位,结果取MQ中的前n位。
PS:已知[x]补,求[-x]补,不论真值是正是负,只需将[x]补连同符号位每位取反,末位加1即可。
-
-
定点数的除法运算:
(此处略难,请参《408天勤-强化班-组成原理-第二章-06/07定点数除法运算》的视频讲解)
- 不恢复余数法(原码除法):余数为正数则商1,余数为负数则商0并恢复余数。右移余数取代左移除数。
- 加减交替法(原码除法):余数为正数则执行(2R-|B|),余数为负数则执行(2R+|B|)。
- 补码除法:数据都用补码表示,符号为参与运算(同减异加)。余数与除数同号则商1并执行(2R-|B|),异号则商0执行(2R+|B|)。一般在最后一位补上一个1,在第一位后补上一个小数点。
-
浮点数的表示格式:N=r^E*M
- r为浮点数阶码的底,通常r=2。
- E为阶码,反应小数点的实际位置和浮点数的范围大小,是有符号的定点整数。
- M为尾数,反应浮点数的精度,是有符号的定点整数。
-
规格化浮点数:把尾数(非零)最高位为有效值的浮点数称为规格化浮点数。
- 原码:X.1XXX…X
- 补码:
- 正数:0.1XXX…X
- 负数:1.0XXX…X
-
浮点数的加减法:
- 将需要运算的数转换为二进制,求阶差(补码运算),然后小阶向大阶看齐(对阶)。
- 尾数求和。
- 结果浮点数规格化(n次左规或1右规)。
- 舍入:0舍1入法和恒置1法(0舍1入法后可能还需要一次右规)。
- 溢出判断:对浮点数,阶码溢出才是正真的溢出。双符号为相异并不是正真的溢出,仅仅是符号位暂存了数值最高位的进位,只需要右规即可。
-
IEEE754标准:数符+阶码(移码)+尾数(原码)
(……这块有点难,后面有时间再补充)
- 当阶码E为全0且尾数M也为全0时,表示的真值X为零,结合符号位S为0或1,有正零和负0之分。
- 当阶码E为全1且尾数M为全0时,表示的真值X为无穷大,结合符号位S为0或1,也有+∞和-∞之分。
- 当阶码E为全1且尾数M不是0,则这不是一个数。
题目知识点
- 二进制小数不能表示所有十进制小数。
- 原码除法结果的符号为先由操作数来确定,补码除法的符号为参与运算。
- (n,k)海明码是指其数据位为k位,数据编码共为n位,校验位(或称冗余位)为n-k位。
- 执行算术运算时产生溢出的根本原因是运算结果的数值超出了所能表示的范围。
……