【计算机组成】数据表示

基本概念

在学习原码,反码、补码和移码之前,需要先了解机器数和真值的概念。

  • 机器数:一个数在计算机中的二进制表示形式, 叫做这个数的机器数。机器数是带符号的,在计算机用一个数的最高位存放符号, 正数为0, 负数为1.
    比如,十进制中的数 +3 ,计算机字长为8位,转换成二进制就是00000011。如果是 -3 ,就是 10000011 。
    那么,这里的 00000011 和 10000011 就是机器数。

  • 真值:因为第一位是符号位,所以机器数的形式值就不等于真正的数值。例如上面的有符号数 10000011,其最高位1代表负,其真正数值是 -3 而不是形式值131(10000011转换成十进制等于131)。所以,为区别起见,将带符号位的机器数对应的真正数值称为机器数的真值。

    例如:0000 0001的真值 = +000 0001 = +1,1000 0001的真值 = –000 0001 = –1

  • 真值:+0101,-0100;
  • 机器数:\([x]_原\)=0101

机器数

关于原码、反码和补码的详解,请看:原码、反码、补码的使用及其原理

  • 原码:x = -0101,\([x]_原\) = 1101
  • 反码:x = -0101,\([x]_反\) = 1010
  • 补码:x = -0101,\([x]_补\) = 1011
  • 移码:x = -0101,\([x]_移\) = \(2^n\) + x = 0011

理解:
补码是为了化减法为加法方便计算机设计运算;
移码是为了方便比较大小,用在浮点数的阶码中。

  • 补码——任何一个有模的系统中,减法都可以通过加其补码来表示。最简单的例子就是以 12 为模的钟表,比如现在是 3 点,那么-5个小时就等于 +7 个小时,都是 10 点。这里 7 就是 5 的补码。
  • 移码——数据对应关系一次挪动一下位置,使得看起来小的数真值也小。比如原本 0000 表示 0,现在表示 -128,然后 0001 表示 -127,一直到 1111 表示 +127,这样就方便比较了。

定点数与浮点数

关于浮点数的详解,请看:浮点数在计算机中的表示与转二进制

  • 定点数:小数点固定 x.xxxxxx,表示范围受限,忘掉它吧
  • 浮点数:数的范围和精度分别表示。
    • 一般格式:EEEE......EMMM.......M,E 部分是阶码(数的范围 i),M 部分是尾数(数的精度)。
      缺点:阶码和尾数位数不固定,太灵活了
    • IEEE754 格式:跟我背下来----
      32 位的是(单精度):1位符号位S + 8位偏指数E + 23位有效尾数M,偏移值为 127。
      64 位的是(双精度):1位符号位S + 11位偏指数E + 52位有效尾数M,偏移值为 1023。
      真值就是(32位为例) \(N = (-1)^S * 2^{(E-127)} * 1.M\)

浮点数的特殊情况:

  • E = 0, M = 0:机器零
  • E = 255, M = 0:无穷大,对应于 x/0
  • E = 255, M != 0:非数值 NaN,对应 0/0

数据校验

基本原理:增加冗余码

  • 码距:合法编码之间不同二进制位数的最小值
  • 码距与检错、纠错能力:
    • 码距 d >= e+1:检查 e 个错误
    • 码距 d >= 2t+1:纠正 t 个错误
    • 码距 d >= e+t+1:同时检查 e 个错误,并纠正 t 个错误。(e >= t)

理解:增加码距就是增加非法编码的数量,看到非法编码就算检查出错误了,而非法编码距离哪个合法编码比较进就认为正确的应该是什么(简单理解,可参考下面的图),也就是可以纠正错误。

这里看到过一个好的几何理解图,仔细品味下:
【计算机组成】数据表示_第1张图片

举个例子:比如一共有 8 位,码距为 1 则检查不出任何错误,因为所有编码都是合法编码。如果码距为 2,那合法编码应该像 00000000, 00000011, 00001100, 00001111 这样,那如果出现 00000001 这样的非法编码就出错了,可检查一位错,但如果两位同时错了,则有可能又跳到另一个合法编码上了,就检查不出 2 位错。

那如果码距是 3,那合法编码应该像 00000000, 00000111, 00111000, 00111111 这样,那如果出现一位错 00000001,或者两位错 00000011,都是非法编码,都能检查出错误,并且此时可以纠正 00000001 为 00000000,纠正 00000011 为 00000111。但是三位同时错就检查不出了。

  • 常见校验策略:奇偶校验、CRC校验、海明校验

ps:海明编码最强视频演示教程:https://www.youtube.com/watch?v=373FUw-2U2k

你可能感兴趣的:(【计算机组成】数据表示)