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

一、信息的二进制编码

1. 信息编码的必要性

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

2. 信息的二进制编码

在这里插入图片描述

二、数值数据的表示

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

1. 进位计数制

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

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

    进制R后缀表示基本符号
    二进制2B0,1
    八进制8O0,1,2,3,4,5,6,7
    十六进制16H0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F
    十进制10D0,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. 反码:不直接使用,一般仅用于原码和补码间的变化过程
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
计算机组成原理计算机科学中重要的一门课程,涉及到计算机的硬件组成、指令系统、数据表示和处理等方面的知识。如果你想自学计算机组成原理,可以参考以下步骤: 1. 学习基础知识:计算机组成原理的学习需要一定的数学和物理基础,可以先学习相关的数学和物理知识,例如逻辑门电路、数制转换、布尔代数等。 2. 学习指令系统:指令系统是计算机中非常重要的一部分,需要了解指令集的种类、指令的组成和执行过程等知识。 3. 学习数据表示和处理:计算机中的数据表示和处理方式有很多种,需要掌握二进制、十进制、八进制和十六进制等多种数制的表示方法,以及浮点数的表示和处理方式等知识。 4. 学习CPU的结构和功能:CPU是计算机中最重要的部件之一,需要了解其结构、功能和执行指令的过程等知识。 5. 学习存储器的结构和功能:存储器是计算机中用于存储数据和程序的部件,需要了解其结构、特点和组成方式等知识。 6. 学习计算机的总线系统:计算机中的总线系统是不同部件之间进行数据传输和通信的桥梁,需要了解总线的类型、特点和传输方式等知识。 7. 练习编程:通过编写简单的汇编语言程序,可以加深对计算机组成原理的理解和掌握。 总之,自学计算机组成原理需要掌握一定的基础知识,并且需要付出较大的努力和耐心。可以通过网上的教程、书籍和视频等途径进行学习。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

云端FFF

所有博文免费阅读,求打赏鼓励~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值