zoukankan      html  css  js  c++  java
  • 计算机基础_数据的表示

    一,数据的表示

    机器数:各种数据在计算机中的表现形式称为机器数,机器数的特点是数的符号用0和1表示,机器数对应的实际数值称为该数的真值

    机器数分为两种
    1)无符号:无符号的表示正数,在机器中没有符号位
    2)带符号:机器数的最高位表示正负的符号位

     # 原码,反码,补码,移码

    1)原码:在原码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号,余下的各位为数的绝对值

    [+0]原 = 00000000   [-0]原 = 10000000

    2)反码:在反码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号。当符号位为0时(正数),其余的几位为该数的二进制数;当符号位为1时(负数),要将剩下的几位按位取反(符号位不变)

    [+0]反 = 00000000    [-0]反 = 11111111

    3)补码:在补码的表示中,机器数的最高位是符号位,用0表示正号,用1表示负号,当符号位为0时(正数),其余的几位为该数的二进制数;当符号位为1时(负数),要将剩下的几位按位取反(符号位不变)且最低位加1

    [+0]补 = 00000000    [-0]补 = 00000000

    4)移码:将补码的符号位按位取反

    [+0]补 = 00000000    4[+0]移 = 10000000

    # 定点数和浮点数

     1)定点数:小数点固定不变的数,即约定机器中所有数据的小数点位置是不变的。

    固定的小数点的位置决定了固定为数的整数部分和小数部分,不利于同时表达特别大的数或者特别小的数
      定点整数:纯整数,小数点在最低有效位之后   111.
      定点小数:存小数,小数点在最高有效位之前   .111

    定点数所能表示的范围较小,在运算的过程中容易溢出,所以就有了下面的浮点数表现形式

    2)浮点数:小数点位置不固定的数,能够表示的范围更加的大

    这种表达方式利用科学计数法来表达实数,即用一个尾数(Mantissa ),一个基数(Base),一个指数(Exponent)以及一个表示正负的符号来表达实数。比如100.11利用科学计数法可以表示位1.0011*102,其中1.0011为尾数,10为基数,2为指数。

     阶符 阶码  数符  尾数

    注:很明显,一个浮点数的表示不是唯一的,当浮点数小数点的位置发生改变时,阶码也会随着改变,因此可以利用多个浮点的形式表示同一个数。一个十进制可以写成多种形式,一个二进制也能写成多种形式。例如1011.1100可以写成 0.10111100*104,也可以写成 10.111100*102
    浮点数通常表示成N = M*R^E

    注:浮点数所能表示的数值范围由解码决定,精度由尾数决定

    3)IEEE754
    IEEE754是由IEEE(电气和电子工程师协会)制定的有关浮点数的工业标准,是20世纪80年代以来最为广泛使用的浮点数运算标准,为许多的CPU所使用
    IEEE 754规定了四种表示浮点数值的方式:单精确度(32位)、双精确度(64位)、延伸单精确度(43比特以上,很少使用)与延伸双精确度(79比特以上,通常以80位实现)。

     ## 校验码

     什么是校验码:在计算机运行时,各个部件之间要进行数据的交换,有两种方法可以确保数据在传送过程中的正确无误,一是提高硬件电路的可靠性,二是提高代码的校验能力,校验能力包括查错和纠错。通常利用校验码来检测传送的数据是否出现错误

    校验码的基本思想:将数据可能出现的编码分为两大类:合法编码和错误编码,合法编码用于传送数据,错误编码是不允许在数据中出现的编码

     码距:一个编码系统中任意两个合法编码之间至少有多少个二进制位不同

    码距:两个码字A和B之间不同的比特数,如1010和0011的码距为2;1111和0000的码距为4

    要想纠错和检错,必须满足两个条件:

    1:在一个码组内为了检测e个误码,要求最小的码距d应满足:d>=e+1

    2:在一个码组内为了纠正t个误码,要求最小的码距应满足d>2t+1

    3:用时纠错和检错:d>=e+t+1

    例子一:不具备纠错能力也不具备检错能力

    若用一位的二进制编码,A=1,B=0,则 A B之间最小的码距为1

    合法码:(0,1)  非法码(0,1)

    上方无检错纠错能力,例如当传送的正确编码为1时,在传送过程中出错变为0,而0也是合法编码,故不能判断是否出错

    例而二:具备检错能力,但不具备纠错能力

    若用两位的二进制编码,A=11,B=00

    合法码:(11,00)  非法码:(01,10)

    上方具备检错,但无法纠错,因为无论A(11)或者B(00),如果一位编码发生错误,都将变成01或者10,01和10都为非法码组,接收端能判断出错,但不能判断是A(11)还是B(00)造成的错误

    例子三,具有检错能力也具有纠错能力

    若用三位的二进制编码,A=111,B=000,则AB间最小的码距为3

    合法码(111,000)  非法码(001,010,011,100,101,110)

    当只有一位出错时:上方具有检错和纠错能力,例如当信息为A(111)时产生一位的错误,错误码将有三种表现形式(110,101,011),这些都是非法码组,可以确定其为误码,这三个非法码组离111非常近,而又离000非常远,可以确定其为A(111)的误码,只要将其中的0改为1即可纠正

    当有两位出错时:例如A(111)变成了 100 ,接收端无法确定是A(111)还是B(000)产生的错误,接收端只能检验错误,无法纠正错误

    当有三位出错时:信息将从一个合法编码A(111)或则B(000),变成合法编码B(000)或则A(111),故无法纠错也无法检错

     1:奇偶检验码

    通过在编码中增加一位校验码来使编码中的1的个数变为奇数(奇校验),或则偶数(偶校验),从而使码距变为2,对于奇校验,它可以检测代码中奇数位出错的编码,但不能发现偶数位出错的情况;当合法编码中的奇数位发生了错误时,即编码中的1变成0,或者0变成1时,则编码中1的个数的奇偶性就发生了变化,从而可以发现错误

    原编码 奇校验 偶校验
    0000 0000 1 0000 0
    0001 0001 0 0001 1
    0010 0010 0 0010 1
    0011 0011 1 0011 0

    常用的奇偶校验码:水平奇偶校验码,垂直奇偶校验码,水平垂直检验码

    水平奇偶校验码

    原码 水平奇校验码
    0000 0001 0000 0001 0
    0000 0010 0000 0010 0
    0000 0011 0000 0011 1
    0000 0100 0000 0011 0

    垂直奇偶校验码:将数据分成若干组,每组排成一行,再加一行校验码

    原编码 垂直奇校验 垂直偶校验
    1101 1001 1101 1001 1101 1001
    0101 0010 0101 0010 0101 0010
    0011 0011 0011 0011 0011 0011
    1100 0100 1100 0100 1100 0100
    . 1000 0011(该行为校验位) 0010 1100(该行为校验位)

    水平垂直奇偶校验码:同时利用水平校验和垂直校验

    原编码 奇校验 偶校验
    1101 1001 1101 1001 0 1101 1001 0
    0101 0010 0101 0010 0 0101 0010 0
    0011 0011 0011 0011 1 0011 0011 1
    1100 0100 1100 0100 0 1100 0100 0
      1000 0011 0(该行为校验位) 0010 1100 1(该行为校验位)

    2:海明码

     Hamming Code是一种利用奇偶性来纠错检测的校验方法。海明码的构成方法是在数据位之间的特定位置上插入k个校验位,通过扩大码距来实现检错和纠错

    设数据位为n位,校验位为k位,则n和k必须满足关系   2k-1>=n+k

     设k个校验位为Pk,Pk-1....P1,n个数据位为Dn-1,Dn-2....D1,D0,对应的海明码为Hn_k,Hn+k-1....H1 

    Pi在海明码的第2^i+1位置,即Hi=Pi,且j=2^i-1

    如果有8位的数据位,进行海明码的校验需要4个校验位(2^4-1=15>8+7)

    得到的海明码为:

    H12  H11  H10  H9  H8  H7  H6  H5  H4  H3  H2  H1
    D7    D6    D5    D4  P4  D3  D2  D1  P3  D0  P2  P1 

     待完成....

  • 相关阅读:
    还在使用golang 的map 做Json编码么?
    Golang 性能测试(2) 性能分析
    golang 性能测试 (1) 基准性能测试
    消息队列 NSQ 源码学习笔记 (五)
    消息队列 NSQ 源码学习笔记 (四)
    消息队列 NSQ 源码学习笔记 (三)
    消息队列 NSQ 源码学习笔记 (二)
    消息队列 NSQ 源码学习笔记 (一)
    你不知道的空格
    Supervisor 使用和进阶4 (Event 的使用)
  • 原文地址:https://www.cnblogs.com/Doaoao/p/10232262.html
Copyright © 2011-2022 走看看