第七章 计算机数据处理

进制

十进制:逢十进一,D

二进制:逢二进一,B

八进制:逢八进一,O,Q

十六进制:逢十六进一,0X,H

进制的相互转换

除k取余法(整数部分):将十进制转换成k进制

乘k取整法(小数部分):将十进制转换成k进制

二进制转换成八进制:三位一划分

二进制转换成十六进制:四位一划分

八进制转换成二进制:一位算三位

十六进制转换成二进制:一位算四位

BCD码

真值:生活中带符号的数值

机器数:使用0表示正号,1表示负号的数字化的数

BCD码:二进制编码表示十进制数的0到9

有权BCD码:包含有8421、2421、5421等

无权BCD码:余3码、格雷码等

8421码:使用四位二进制数编码来表示 0 ~ 9 的十进制数字。十六进制数C表示+号,十六进制数D表示 - 号,符号都放在数字串的末尾处。8421遇到1001就进位。

十进制数 二进制数(BCD码)

0 0000

1 0001

2 0010

3 0011

4 0100

5 0101

6 0110

7 0111

8 1000

9 1001

余3码:无权BCD码,在8421的基础上,再加上十进制数字3(0011)。

2421码:最高位权重是2。在表示十进制数字的时候,十进制数 >= 5,则2421的最高位是1;十进制数 > 5时,则2421的最高位是0。

字符编码ASCII码和汉字编码略。

字符串大小端存放(重点)

大端模式:字符串高位在低位,字符串低位在高位

小端模式:字符串低位在低位,字符串高位在高位

大端方式直观上看上去更像人的阅读习惯。

校验码(重点)

通过一定的策略,在接收端能够对接收到的数据检查出传输中的错误。

(1)奇偶校验码

在信息的最后一位上加上一位奇偶校验码,用以判断数据在传输过程中是否发生了错误。

奇校验:添加一位校验码后,判断数据中1的个数是否为奇数

偶校验:添加一位校验码后,判断数据中0的个数是否为偶数

(2)循环冗余校验码

根据多项式构造循环冗余校验码

<1>写出 M(x)和G(x)的二进制码;

<2>M(x)左移G(x)的最高次数;

<3>将上述结果对G(x)做模二除法得余数,与被除数M(x)拼接即得到CRC码。

比如:M(x) = x三次方 + 1

G(x) = x三次方 + x + 1

M(x):1001

G(x):1011

左移M(x)三位:1001000

1001000 mod 1011 得余数110,合并即可得到CRC码1001110

模二除法:异或运算

循环冗余校验码发特性:

<1>具有r检测位的多项式能够检测出所有小于/等于r的突发错误;

<2>长度大于r+1的错误逃脱的概率是2的r次方分之1。
(3)海明码

具有一位纠错能力

在信息字段中插入一些数据,检测数据字段中哪一位数据发生了变化。

海明码有配偶原则 / 配奇原则。

确定海明码的位数:2的r次方 - 1 >= k + r

其中k是数据的位数,r是需要加的校验码的位数。

确定校验码方法:

p1 = 3 5 7 9

p2 = 3 6 7 10

p3 = 5 6 7

p4 = 9 10 11

校验海明码方法:

e1 = 1 3 5 7 9

e2 = 2 3 6 7 10

e3 = 4 5 6 7

e4 = 8 9 10 11

构建海明码步骤:

<1>确定校验码位数;

<2>将数据插入到对应的校验码位置上;

<3>根据校验位和数据位的关系,计算出校验码并插入到对应的位置上。

校验海明码步骤:

<1>将校验码中特定位一起异或运算,得到结果e4e3e2和e1;

<2>出错位即e4e3e2e1。

原码、反码、补码、移码(重点)

无符号数:最高位不表示符号

有符号数:最高位表示符号,0为正,1为负

原码、反码和补码的特点:

<1>最高位都是符号位;

<2>表示正数时,这三种表示法都是一样的;

<3>表示负数时,数值部分,补码是原码的“每位取反再加1”,反码是原码的“每位取反”;

<4>原码中不表示-1;

<5>“0”的原码和反码都有两种,而补码只有唯一的一种表示,所以补码能多表示一个负数;

<6>已知一个数的补码,求这个数的负数的补码?:将补码连同符号位在内取反后再+1。

移码:对补码表示法的改进

<1>移码就是补码的符号位取反;

<2>在真值上加上2的n次方就是移码(n是数值部分的位数);

<3>移码表示的0也是唯一的。

补码

补码运算的优点:

<1>补码运算可以直接 [x]补 + [-x]补;

<2>0的表示唯一,在数学上可逆;

<3>符号位可以参与运算,原码则不行;

<4>只需要设置加法器,减法运算可以转换;

<5>扩充数位时,只需要在最高位补符号位即可。

补码特点:

<1>-1的补码全1;

<2>最小负数的补码,首位为1,后面全0;

<3>补码可以多表示一个负数。

移位

逻辑移位:逻辑左移时,高位移丢,低位补0;右移时,低位移丢,高位补0

算术移位:

对于补码而言,最后一个1的前面部分和反码相同,后面部分与原码相同

则当机器数为正:原、反、补都补0;

当机器数为负:

<1>原码:除去符号位不动外,数值位同正数情况一样(移位添1);

<2>反码:除去符号位不动外,移位添1;

<3>补码:左移补0,右移补1。

定点数的加减运算(重点)

<1>原码定点数的加减运算

(1)加法:先判断符号位,相同则绝对值相加,不同则绝对值大的数减去绝对值小的数,结果符号同绝对值较大的数;

(2)减法:将减数的符号取反,再按原码定点数加法的方式进行运算。

<2>补码定点数的加减运算

(1)加法:符号位参加运算,并且两数和的补码等于两数的补码之和,即:

[x+y]补 = [x]补 + [y]补

(2)减法:[x-y]补 = [x]补 + [-y]补

溢出(重点)

<1>符号相同两数相加,结果符号相反,则溢出;

<2>进位判断:数值最高位的进位和符号位产生的进位进行异或,异或结果为1则溢出,结果为0则无溢出;

<3>双符号位:两位符号不同,则溢出;

原码的乘除运算(重点)

原码一位乘

运算法则:若Yi=1,+X; 若Yi=0,+0.(n次加法,n次移位)

补码的乘除运算(重点)

<1>补码一位乘

(1)校正法

若Y>0,计算方法与原码一位乘类似;

若Y<0,结果 +[-x]补校正 (校正无需移位)

(2)比较法(booth法)

采用双符号位,符号位参与运算

乘数Y末位增设Yn+1=0,根据Yn,Yn+1判断,进行n+1步加法,最后一步不移位。

浮点数的基本概念

(1)浮点数阶码的底r省略;

(2)尾数的位数反映了浮点数的精度;

(3)大多数机器中,尾数为纯小数,常用原码/补码表示;阶码为定点整数,常用补码/移码表示

IEEE 754标准(重点)

第一个部分是数符,表示浮点数的正负;

第二个部分是阶码(含有阶符),使用移码表示;

第三个部分是尾数,使用原码表示。

阶码部分使用移码,可以直观的看出阶码的大小,需要加上一个偏移量,常见的偏移量是7FH(127)、3FFH(1023)、3FFFH等。

尾数部分一般都是规格化表示,有一个隐藏位1不直接写出来。

例题:假设浮点数x的IEEE 754浮点数形式是4136 0000H,则其浮点数的十进制数值是?

答:十六进制的二进制表示:0100 0001 0011 0110 0000 0000 0000 0000

按IEEE 754标准排列:0 10000010 01101100000000000000000

指数 = 阶码 - 127(偏移量) = 10000010 - 127 = 3

尾数加上隐藏位的1:1.011011

综上,x = +(1.011011) * 2³ = +1011.011 = (11.375)D

规格化

为了提高浮点数的精度,必须要保证尾数是一个规格化的数。

尾数w需要满足1> |w|>1/2(基数为2)

(1)原码表示尾数:尾数的第一位必须是1的形式,例如0.1xxxxx或者1.1xxxxx的形式

(2)补码表示尾数:尾数的第一位必须与符号位相反,例如0.1xxxxx或1.0xxxxx的形式

尾数为-1/2的时候,其补码形式是11.1000…0。由于不满足规格化的要求,所以不是规格化的数字;

尾数为-1的时候,其补码的形式是11.000…0。由于小数补码可以表示-1,且满足规格化,则特别规定-1是规格化的数。

左规:尾数求和时,出现00.0xxx…x或者11.1xxx…x的形式,向左移动尾数,阶码减一,移动次数不确定,直到满足规格化形式时结束;

右规:尾数求和时,出现01.xxx…x或者10.xxx…x的形式,向右移动尾数,阶码加一,移动一次即可。

舍入

(1)0舍1入法:尾数右移时,移去的若是0,则舍去;移去的是1,则在尾数的末位加1。若加上这个1又导致尾数溢出,则需要右规一次;

(2)恒置1法:尾数右移时,无论丢掉的末位是0还是1,尾数末尾都恒置1.

浮点数的加减运算(重点)

<1>对阶:浮点数两数的小数点位置对齐(小阶码向大阶码对齐);

<2>尾数求和:对阶后尾数进行定点数加减运算;

<3>规格化:按上述步骤进行规格化,提高运算精度;

<4>舍入:提高精度,考虑尾数右移时丢失的数值位的影响。

例题:十进制数x=-5/256,y=+59/1024,按照上述的浮点数运算规则计算x-y,结果使用二进制表示。浮点数的格式:阶符两位,阶码3位,数符两位,尾数9位,舍入使用0舍1入法。

答:先将两个数变成二进制浮点数形式,

[x]补 = 11011,11.011000000

[y]补 = 11100,00.111011000

[-y]补 = 11100,11.000101000

<1>对阶:x的阶码比y的阶码小1,则x向y对齐,x的尾数右移一位(阶码加一),

[x]补 = 11000,11.101100000

<2>尾数求和:[x]补 - [y]补 = [x]补 + [-y]补,

即[x-y]补 = 11100,10.110001000

<3>规格化:右规一次,阶码加一,可得:

[x-y]补 = 11101,11.011000100 0舍去

<4>舍入:由于舍去的是0,则不做任何处理;

<5>溢出判断:阶符的符号为11,说明未发生溢出,则结果转换成真值即可。

算数逻辑单元

串行加法器:只设一个全加器的加法器

并行加法器:由若干个全加器组成

数字电路可分为组合逻辑电路和时序逻辑电路

组合逻辑电路:没有记忆,运算后的结果需要立即送入寄存器保存;

时序逻辑电路:具有记忆元件,即触发器,可以记录前一时刻的输出状态(CPU就是一种复杂的时序逻辑电路)。

ALU是一种组合逻辑电路,实际使用ALU时,输入端口A和B必须与锁存器相连,且运算过程中锁存器的内容不变,输出必须送到寄存器保存。

锁存器:多位触发器,常被用作运算器中的数据暂存器(临时存放数据的地方)。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值