数据的表示和运算【考研/408】

十进制转换为二进制

整数:如123转换为二进制,将123无限除2,将余数写在右边,当处到最后为0的时候,把右边的余数自下往上写,也就是下面的是最高位,上面的是最低位,具体如书P27

小数:将小数部分乘2,如果结果>1,则记1,并把多出来的小数接着乘,可以无限乘,看最后要取几位,自上往下记,也就是最上面的是最高位

 

带正负号的叫 真值,不带正负号的叫机器数,机器数中0代表+,1代表-

 

8421码(是一种十进制编码),由于8421可以代表16种代码,因此其表示10进制时,有6中的可能是冗余的,因此在两数运算相加的和大于等于二进制1010时要加6修正,因为1010~1111是无效码

 

码距,合法码字间最少变化的二进制位数,如1100和1101之间码距为1,1001和0010之间码距为3

 

奇偶校验码,在最前面加奇偶校验位

奇校验码:校验码+信息位中一共有奇数个“1”

偶校验码:校验码+信息位中一共有奇数个“0”

可以检测出奇数位错误,但不能检查出偶数位,也不能纠错

 

海明码

可以发现2位错误并纠正1位错

如求1010海明码

1.算出校验位数k

∴ k=3

2.确定校验位在海明码中的位置

则空出k个2^x的位置 如这里要空出三个 分别是2^0\2^1\2^2 , H1 H2 H4

H7

H6

H5

H4

H3

H2

H1

1

0

1

 

0

 

 

 

求校验位。实际上这里进行的是:

要求P1则 要求**1通配符下,即001、011、101、111即H1,H3,H5,H7的偶校验的校验码

      P2则 就是要求 *1*通配符下所有的位数的偶校验

      P3则 就是要求 1**通配符下所有的位数的偶校验

若使用简便方法则如下:

                                               P1(H1)           P2(H2)          P3(H4)

因为D1在H3上,所以 3=            1                    1

       D2在H5上,所以 5=            1                                        1

       D3在H6上,所以 6=                                  1                  1

       D4在H7上,所以 7=            1                    1                  1

所以P1=D1⊕D2⊕D4=0

      P2=D1⊕D3⊕D4=1

      P3=D2⊕D3⊕D4=0

 

校验:则是把S1=P1⊕D1⊕D2⊕D4

    S2=P2⊕D1⊕D3⊕D4

    S3=P3⊕D2⊕D3⊕D4

若S1 S2 S3为“000”则说明没出错,如果不是000,则结果的数字就是出错的位数

如001则说明H1出错

 

循环冗余校验(CRC)码

可以发现并就整一位或多位错(与多项式有关),用于数据链路层,大量数据时

R=生成多项式的最高幂次   K=信息码长度    N=校验码位数=K+R

如生成多项式G(x)=𝑥3+𝑥2+1 ,信息码为101001

对应的二进制码为1101,1𝑥3+1𝑥2+0𝑥1+1 ,所以如果给出二进制码可以反推最高幂次

则R=3  K=6  R=9

将信息码左移R位  →  101001000

然后做如下,最后的余数作为校验位

检错和纠错时,将收到的CRC码用生成多项式的二进制做模2除法,若余数为0,则无错

若得到余数010则C2出错,取反即可

 

定点数的表示与运算

全是计算的选择题,例如:加减运算后的结果,类型转换后的结果

补码:正数不变,负数符号位不变,数值取反+1,适用于知原求补,知补求原

反码:正数不变,负数符号位不变,数值取反,适用于知原求反,知反求原

  

  一个真值的移码和补码仅差一个符号位

  移码保持数据原有的大小顺序

 

算数位移:符号位不参与移动

 

逻辑位移:符号位也参与移动

不管左移还是右移都填0

 

循环位移:

 

补码定点数加减运算

(mod M):丢掉溢出位

补码运算结果任为补码

 

溢出判断:

1)一位符号位

V=𝐴𝑠𝐵𝑠𝑆𝑠+𝐴𝑠𝐵𝑠𝑆𝑠

若V=0,无溢出;若V=1,溢出

2)两位符号位

 

3)一位符号位其他方法

若符号位进位与最高位进位相同则无溢出,不同则溢出

 

大端方式存储:将高字节的数据存储在低地址,低字节数据存储在高地址

小端方式存储:将高字节的数据存储在高地址,低字节数据存储在低地址

 

C语言以补码形式存放数据

 

8421是十进制编码

 

模4补码有模2补码的全部优点且更易检查加减的溢出问题,只需1个符号位

 

运算中正数的*2就是把二进制左移1位,/2就是把二进制右移1位

 

浮点数的表示和运算

规格化:

补码的规格化:

正数的最高数值位必为1

负数的最高数值位必为0

 

补码扩充:

补码扩充时,只要补足符号位就行,也就是当正数时,补0,负数时补1

 

IEEE754标准下:

移码可以直接看做无符号数进行运算 如上述例子的double型中

移码为000 0001 1100,看做无符号十进制数为128,则阶码真值=移码-偏移量=28-1023

阶码对应移码机器数不能全0/全1,全0/全1保留 有他用 ↓

重点掌握普通情况

 

科学计数法举例 ↓

 

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值