计算机的重点编码方式

编码的概念

  • 用若干位码元按一定规律排序起来表示给定信息的过程称之为编码

    • 直观理解: 使用一组数组合来代表一种信息叫做编码

BCD码(二 > 十进制编码)

概念

  • 用4位二进制数码表示一位十进制数0~9十个状态时,这些代码成为二 > 十进制代码, 简称BCD(Binary Coded Decimal)
  • BCD码需要4位二进制码元,4位二进制码有2^4 =16种组合, 但只用其中10种组合表示十进制数0~9.

编码类型

  • BCD码表

    十进制 8421码 5421码 2421码 余3码 Gray码
    0 0000 0000 0000 0011 0000
    1 0001 0001 0001 0100 0001
    2 0010 0010 0010 0101 0011
    3 0011 0011 0011 0110 0010
    4 0100 0100 0100 0111 0110
    5 0101 1000 1011 1000 0111
    6 0110 1001 1100 1001 0101
    7 0111 1010 1101 1010 0100
    8 1000 1011 1110 1011 1100
    9 1001 1100 1111 1100 1000
  • 8421BCD码:

    • 有权BCD码: 从左向右每一位的1分别代表8, 4, 2, 1.
  • 5421BCD码

    • 有权BCD码,与8421BCD码类似, 但加权方法不唯一.
  • 2421BCD码

    • 有权BCD码,但加权方法不唯一, 0-9, 1-8, 2-7, ... 4-5互为反码, 自补代码.

    • 镜像互补特性

      十进制数 镜像对比二进制数 镜像对比二进制数 十进制数
      0 0000 1111 9
      1 0001 1110 8
      2 0010 1101 7
      3 0011 1100 6
      4 0100 1011 5
  • 余3码

    • 余3码的数值比表示的十进制数(8421码)多3, 0-9, 1-8, 2-7... 4-5互为反码,自补代码。

    • 镜像互补特性

      十进制数 镜像对比二进制数 镜像对比二进制数 十进制数
      0 0011 1100 9
      1 0100 1011 8
      2 0101 1010 7
      3 0110 1001 6
      4 0111 1000 5

可靠性编码

Gary(格雷)码

  • 格雷码规律

Gray码的特性

  • 反射性: 按对称轴方向,高位互补反射,低位镜像对称。
  • 单位距离性: 任何相邻的两组代码仅有一位数码不同。
  • 循环性: Gray表示的最大数和最小数之间也由单位距离性。

Gray码为什么安全?

  • Gary码在变化小,安全度则相对提高.

Gray与二进制数互转

  • 设有n位二进制数:

[B_{n-1}B_{n-2}...B_0 ]

  • 和n位Gray码:

    [G_{n-1}G_{n-2}...G_0 ]

    • 二进制数转Gray码

      [egin{align} G_{n-1} =& B_{n-1} \ G_i =& B_{i+1} oplus B_i(i = 0, 1,2....n-2) end{align} ]

    • Gray码转二进制数

[egin{align} B_{n-1} =& G_{n-1} \ B_i =& B_{i+1} oplus G_i(i = 0, 1, 2...n-2) end{align} ]

快速写出少数格雷码

  • 利用Gray码的对称性(缺少一张动图)

奇偶校验码

  • 奇偶校验码表

    十进制数 8421BCD 奇校验 8421BCD 偶校验
    0 0000 1 0000 0
    1 0001 0 0001 1
    2 0010 0 0010 1
    3 0011 1 0011 0
    4 0100 0 0100 1
    5 0101 1 0101 0
    6 0110 1 0110 0
    7 0111 0 0111 1
    8 1000 0 1000 1
    9 1001 1 1001 0
    位意义 信 息 位 校验位 信 息 位 校验位
  • 奇校验:使得一组代码中信息位和校验位中“1”的个数之和为奇数.

  • 偶校验:使得一组代码中信息位和校验位中“1”的个数之和为偶数.

奇偶校验注意事项

  • 奇偶校验只能提高安全度,并不能保证一定安全.
  • 假设发送了0001但出错接收到的是0111, 奇校验依然是1,但错了两位.

字符编码(ASCII 码)

带符号数的编码

  • 数字系统表示正负数(二进制)的一般(定点)方法

    • 最高位作为符号位,0为正、1为负
  • 其余各位为数值

  • 代码位数称为字长,其数值称为真值(类似数学上的绝对值)

[egin{equation} left{ egin{array}{lr} 原码: 符号位+数值位 & \ \ 反码: 正数和原码一样;负数符号位为1,数值按位取反 \ \ 原码: 正数与0和原码一样,负数符号位为1,数值"取反加1" & end{array} ight. end{equation} ]

原码

  • 符号位 + 数值位

  • 例如:

    [N = (+54)_{10} = (+110110)_2 qquad [N]_原 = 00110110 \ N = (-54)_{10} = (-110110)_2 qquad [N]_原 = 10110110 ]

反码

  • 正数反码和原码一样; 负数符号位为, 数值按位取反

    [N=(+42)_{10} =(+101010)_2 qquad [N]_原 =00101010 [N]_反 =00101010 \ N=(-42)_{10} =(-101010)_2 qquad [N]_原 =10101010 [N]_反 =11010101 ]

补码

  • 正数补码和原码一样, 负数符号位为1,数值取反码加1

  • 或者也可以使用公式求补码:

    [egin{equation} [N]_{补}=left{ egin{aligned} & N & 0 le N le 2^{n-1} \ & 2^n + N & -2^{n-1} le N < 0 end{aligned} quad (mod 2^n) ight. end{equation} ]

    • 例如求6的二进制(8位), 那么带入公式. 高位溢出, 保留8位.

      [egin{align} n = 8 N = 6 \ 2^n + N = 2^8 + 6 =& 262 \ (262)_{10} =& (100000110)_2 \ =& (00000110)_2 end{align} ]

  • 例如(+6)10, (-5)10的4位和8位二进制补码

    位数/数值 原码 补码
    4位 +6 0110 0110
    -5 1101 1011
    8位 +6 00000110 00000110
    -5 10000101 11111011
    • 注意无效位的扩展:11111011

    • 也可以计算为:

      [2^8+(-5)=251=(11111011)_2 ]

  • 补码 > 原码方法

    [egin{align} 方法1:quad & {{[X]_补}}_补 = [X]_原 \ 方法2:quad & 减一取反 end{align} ]

  • 例如4位长补码0011, 1011, 1000, 求出对应十进制数

    补码 原码 十进制数
    0011 0011 +3
    1011 1101 -5
    1000 -8
  • 补码和原码/反码表示的数值范围不同(补码无-0)

    4位 8位 n位
    原码 -7 ~ +7 -127 ~ +127 -(2^n-1) ~ +(2^n-1 - 1)
    反码 -7 ~ +7 -127 ~ +127 -(2^n-1) ~ +(2^n-1 - 1)
    补码 -8 ~ +7 -128 ~ +127 -(2^n-1) ~ +(2^n-1 - 1)
  • 补码更适合带符号二进制数的计算

    • 计算机使用补码可以把减法当加法算, 如: A-B = A+(-B)对于补码而言是成立的
  • 用4位二进制计算补码加法计算(6-3)和(5+6)

原文地址:https://www.cnblogs.com/ieeqc/p/14460209.html