计算机组成原理(2.1)—— 数制和编码

一、信息的二进制编码

1. 信息编码的必要性

  • 计算机内部处理的所有数据都必须是 “数字化编码” 过的数据
  • 现实世界中的信息(声音、文字、图像…)由输入设备转二进制编码表示,输入设备必须有 “离散化” 和 “编码” 两方面功能
  • “计算机层次结构” 在数据表示中的反映
    在这里插入图片描述
  • 媒体信息被计算机处理的过程
    在这里插入图片描述

2. 信息的二进制编码

在这里插入图片描述

二、数值数据的表示

  • 数值数据表示的三要素(确定一个数值数据的值必须先确定这三个要素)
    • 用二进制编码
    • 进位计数制
    • 定、浮点表示

1. 进位计数制

  1. R进制数字系统中,采用R个基本符号(0,1,2,.,R- 1)表示各位上的数字,采用 “逢R进一” 的运算规则,对于每一个数位i,该位上的权为 R i R^i RiR被称为该数字系统的基数

  2. 在计算机系统中,常用的几种进位记数制有下列几种

    进制 R 后缀表示 基本符号
    二进制 2 B 0,1
    八进制 8 O 0,1,2,3,4,5,6,7
    十六进制 16 H 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
    十进制 10 D 0,1,2,3,4,5,6,7,8,9
  3. 进制转换

    1. R进制 → 十进制按权展开
      在这里插入图片描述
    2. 十进制 → R进制整数小数分开处理
      1. 整数部分的转换方法是:“除基取余,上右下左”。也就是说,用要转换的十进制整数去除以基数R,将得到的余数作为结果数据中各位的数字,直到余数为0为止。上面的余数(先得到的余数) 作为右边低位上的数位,下面的余数作为左边高位上的数位。
        在这里插入图片描述
      2. 小数部分的转换方法是:“乘基取整,上左下右”。也就是说,用要转换的十进制小数去乘以基数R,将得到的乘积的整数部分作为结果数据中各位的数字,小数部分继续与基数R相乘。以此类推,直到某步乘积的小数部分为0或已得到希望的位数为止。最后,将上面的整数部分作为左边高位上的数位,下面的整数部分作为右边低位上的数位。
        在这里插入图片描述
    3. 二/八/十六进相互转换
      1. 八/十六进制 → 二进制每一位数改成等值的3/4位二进制数,整数部分高位0省略;小数部分低位0省略
        在这里插入图片描述
      2. 二进制 → 八/十六进制整数部分低向高每3/4位数用一个等值八/十六进制数替换,不足时高位补0小数部分高向低每3/4位数用一个等值八/十六进制数替换,不足时低位补0
        在这里插入图片描述

2. 定点与浮点表示

  • 计算机中只能表示0/1,不能表示小数点,小数点的处理方法区分定点数和浮点数

  • 定点数可能是小数或整数,只是小数点位置要么在最左要么在最右,定点数是浮点数的组成部分;

  • 定点数和浮点数是计算机中整数和实数表示的基础
    在这里插入图片描述

  • 浮点数中

    • 绝对值最小的非零数是 0.0....01 × R − 11...1 0.0....01 \times R^{-11...1} 0.0....01×R11...1
    • 绝对值最大的非零数是 0.1....11 × R 11...1 0.1....11 \times R^{11...1} 0.1....11×R11...1

3. 定点数的编码表示

  • 定点/浮点表示解决了小数点问题
  • 如何数字化符号部分:用0和1表示正负号,通常0代表正号。
  • 数字化的符号部分如何和数值部分一起参与运算:各种把符号位和数值部分一起编码的方法,因为浮点数 = 定点整数 + 定点小数,所以只要考虑定点数的编码表示
  • 定点数编码方法:原码、反码、补码、移码

(1)原码

在这里插入图片描述

  • 示例(8位原码表示十进制数)

    • [ − 3 ] 原 = 10000011 [-3]_原 = 1000 0011 [3]=10000011
    • [ 0.25 ] 原 = 0.0100000 [0.25]_原 = 0.010 0000 [0.25]=0.0100000
    • [ 0 ] 原 = 10000000 = 00000000 [0]_原 = 10000000 = 00000000 [0]=10000000=00000000
    • [ + 0 ] 原 ≠ [ − 0 ] 原 [+0]_原 \neq [-0]_原 [+0]=[0]
  • 原码整数和小数的表示范围,关注范围和特殊值
    在这里插入图片描述

(2)反码

在这里插入图片描述

  • 示例(8位反码表示二进制数)

    • [ − 0.0110 ] 反 = 1.1001 [-0.0110]_反 = 1.1001 [0.0110]=1.1001
    • [ + 0.0000 ] 反 = 0.0000 [+0.0000]_反 = 0.0000 [+0.0000]=0.0000
      [ − 0.0000 ] 反 = 1.1111 [-0.0000]_反 = 1.1111 [0.0000]=1.1111
  • 反码整数和小数的表示范围,关注范围和特殊值
    在这里插入图片描述

  • 无论整数还是小数,原码和反码的表示范围相同,且0都有两种表示方法

(3)补码

  1. 模运算系统

    • 一天中的24小时是一个模运算系统,任意时刻的钟点数都是0到23间的一个整数,这有点类似24进制
      • 今天的第24点,就是明天的0点;
      • 今天的25点,就是明天的凌晨1点;
      • 今天的-5点,就是昨天的19点,我们称19是-5对模24的补码 / -5的模24补码等于19
    • 钟表上的12个刻度也是一个模运算系统。假定时钟现在指向10,要把指针只向6,有两种方法
      • 倒拨4格:10 - 4 = 6
      • 正拨8格:10 + 8 = 18 = 6 (mod 12)
      • 所以模12系统中 -4 = 8 (mod 12),我们称8是-4对模12的补码 / -4的模12补码等于8
    • 根据以上示例,可以得结论:一个模运算系统中
      • 一个负数可以用它的正补数(负数的补码)代替一个负数的补码 = 模 - 该负数的绝对值
      • 一个负数和其正补数的绝对值之和 = 模
      • 一个正数的补数即为其本身
      • 可以把减法运算转换为加法运算:A - B = A + B的补码
    1. 计算机也是一个模运算系统
      • 计算机中的存储部件和运算部件都只有有限位,如果运算产生了多于n位的数据,高位舍去,这称为 “溢出”
      • 在计算机中,模是根据数据长度来的,n的模就是1后加n个0
        在这里插入图片描述
  2. 补码

    1. 编码规则
      在这里插入图片描述

    2. 用途:表示定点整数

    3. 特殊数的补码(假定机器数有n位)
      在这里插入图片描述

      • [ − 2 n − 1 ] 补 = 2 n − 2 n − 1 = 10 … 0 ( n − 1 个 0 ) ( m o d 2 n ) [-2^{n-1}]_补= 2^n - 2^{n-1} = 10…0(n-1个0) (mod 2^n) [2n1]=2n2n1=100n10mod2n

      • [ − 1 ] 补 = 2 n − 0 … 01 = 11 … 1 ( n 个 1 ) ( m o d 2 n ) [-1]_补= 2^n - 0…01 = 11…1(n个1) (mod 2^n) [1]=2n001=111n1mod2n

      • [ − 1.0 ] 补 = 2 − 1.0 = 1.00 … 0 ( n − 1 个 0 ) ( m o d 2 ) [-1.0]_补= 2 - 1.0 = 1.00…0(n-1个0) (mod 2) [1.0]=21.0=1.000n10mod2

      • [ + 0 ] 补 = [ − 0 ] 补 = 00 … 0 ( n 个 0 ) [+0]_补= [-0]_补= 00…0(n个0) [+0]=[0]=000n0

        注:计算机中并不会出现-1.0的补码,这里只是想说明:同一个真值在机器中可能有不同的机器数!,另外可以看到,0的补码表示只有一种

    4. 示例

      1. [ − 1101 ] 补 = 10011 [-1101]_补 = 10011 [1101]=10011
      2. [ − 0.0110 ] 补 = 2 + x = 10.0000 − 0.0110 = 1.1010 [-0.0110]_补 = 2+x = 10.0000 - 0.0110 = 1.1010 [0.0110]=2+x=10.00000.0110=1.1010
      3. [ + 0.00 ] 补 = [ − 0.00 ] 补 = 10.00 − 0.00 = 10.00 = 0.00 ( 溢 出 ) [+0.00]补= [-0.00]_补= 10.00 - 0.00 = 10.00 = 0.00(溢出) [+0.00]=[0.00]=10.000.00=10.00=0.00
    5. 补码整数和小数的表示范围,关注范围和特殊值
      在这里插入图片描述

    6. 补码与真值的简单转换
      在这里插入图片描述

      • [ X ] 补 [X]_补 [X] [ − X ] 补 [-X]_补 [X]连带符号位 “各位取反,末尾加1”
      • X X X [ X ] 补 [X]_补 [X]的互转:符号位/正负性单独判断,数值部分“各位取反,末尾加1”

(4)移码

  • 移码主要用于表示浮点数的阶码只能表示整数
  • 同一个真值的移码和补仅差一个符号位
    在这里插入图片描述
  • 移码的表示范围
    在这里插入图片描述

(5)四种定点数编码形式的对比

  1. 原、反、补码的最高位均为符号位

  2. 真值为正时,原、反、补码形式相同,即符号位用0表示,数值部分同真值

  3. 真值为负时,原、反、补码形式不同,符号位都用1表示,数值部分

    1. 反码是原码的 “每位取反”
    2. 补码是原码的 “每位取反再加1”
  4. 移码和补码仅符号位不同

  5. 关于表示范围:

    1. 原码和反码的整数、小数表示范围相同,且0都有2种表示方法
    2. 补码和移码的整数表示范围相同,且0都只有1种表示方法
  6. 用途

    1. 原码:计算机中用原码小数表示实数(浮点数)尾数部分
    2. 移码:计算机中用移码整数表示实数(浮点数)指数部分
    3. 补码:计算机中用补码表示有符号整数
    4. 反码:不直接使用,一般仅用于原码和补码间的变化过程

猜你喜欢

转载自blog.csdn.net/wxc971231/article/details/108094813
今日推荐