计算机组成原理(二)数据的表示和运算

本文概览

  1. 本文重点讨论计算机内部数据的机器级表示方式
  2. 包括 正负数,小数,各进制 数值数据(实数)
  3. 包括 中英文和各种符号 非数值数据
  4. 包括C 语言各种类型的数据等

本文目录

  1. 小数的表示

阅读理解

  1. 在阅读本章节的时候,对于原码,补码的理解上出现了困难
  2. 在书中缺失了,两者之间的关系,导致我难以理解和记忆,所以在阅读时,很多时候不是我们理解能力不够,而是缺失相关信息,难以对其有一个逻辑上的串联,且人们更愿意讲话说的言简意赅
  3. 在对比书中的讲解和B站视频两者的内容,除了两者的表现形式,一种是书面,一种视频,还有一点是,更注重于对于知识的整体性理解,会穿插之前学过的一些知识,以及关联以后要讲的知识,知道为什么要学这个知识点,跟其他的知识点有什么关系,对比相似的知识点的优劣等等
  4. 学会提问 一书中就写到,掌握人们表达时的潜台词(褒),也就是哪些表达者知道的,被表达者忽略的东西,能够顺着表达者的思维进行快速理解
  5. 上面的思考让我学会了,如今的知识获取很方便,不要局限于一个作者的思维里,从多个人的口中获取该知识,能够有更好的启发,重要的是理解到这个知识点,而不是硬啃着书不放

数据的表示

  1. 数据的表示包括两部分,数据存放的硬件,和规定数据格式的软件(约定,规则等)
  2. 硬件是有价值的,也就是需要钱买的,所以要存储数据时,需要考虑数据存放的空间,用尽可能小的空间表示一个数
  3. 软件是人设计的,也就是软件的定义会尽可能的方便人们的使用,提高人们的效率,用简单的方式存储一个数
  4. 但这两者在大部分情况下是冲突的,就像建仓库一样,人们肯定是想要越大越好,说不定以后要存放的东西可能会变多
  5. 还有一点就是,存储数据本身是为了解决问题,而解决问题就要通过对数据进行计算,所以如何方便地进行计算,对于数据的表示也有一定的影响
  6. 从这三个角度出发,就能快速理解最开始那帮人是如何设计数据的表示形式的
  7. 数据的表示分为定点与浮点两种表达方式,需要注意的是直到现在小数的表示都只是尽可能地提高准确度,并不能完全相等地表示

相关概念

机器数 和 真值

  1. 机器数是在计算机中真实存储的数,也即 0 和 1 的排列组合
  2. 而真值就是我们类型通常使用的数据,像 1, -3 ,5.11,p,# 等等
  3. 编程语言中会将我们的真值进行分类,也就是编程语言的数据类型,不同的数据类型表示的方法不同,但反映到计算机上,都是 0 和 1

定点数的表示

  1. 定点数是最开始数据的表示形式,优点是在表示整数时,节省空间
  2. 缺点是在表示小数,特别是大于1的小数时,缺乏灵活性,且占用空间大
  3. 因而产生了浮点数这种表示形式

定点数的四种形式

原码,补码,反码,移码

  1. 下表中是当二进制采用三种格式时,所表示的真值,采用 8位字节码
二进制代码 源码 补码 反码
00000000 0 0 0
00000001 1 1 1
011111111 127 127 127
10000000 0 -128 -127
10000001 -1 -127 -126
111111111 -127 -1 0
  1. 移码是与补码相对应的,将补码的符号位取反即可

浮点数的表示

  1. 对于 51.12 这种数来说,使用 0.5112 ∗ 1 0 2 0.5112 * 10 ^ 2 0.5112102这种方式,可以表示大部分实数,称为科学计数法

  2. 0.5112 称为 位数,10 称为基数,2 称为阶码,与平时使用不同的是,基数在计算机中通常使用 2, 4, 8 等值作为基数,而不是 10

  3. 下表中 0 的位置就是数符,表示正负

  4. 10010001 是 阶码,表示多少次方

  5. 而基数在计算机设计的时候,隐性的规定了是 2 还是 4 还是 8

  6. 最后面的 000 0000 1000 0011 0000 0000 表示尾数

0 10010001 000 0000 1000 0011 0000 0000

IEEE 浮点数标准

  1. 在 IEEE 中,规定了32 和64两种浮点数格式
浮点数标准 数符 阶码 尾数
32位 1 位 8位 23位
64位 1为 11位 52位
  1. 编程语言中,为什么 0.1 + 0.2 不等于 0.3
    • 阮一峰的解答
    • 0.1 使用IEEE 64 表示
    • 0 01111111011 1001100110011001100110011001100110011001100110011010
    1. 其中 0 表示正负号 0 表示正数,1表示负数
    2. 01111111011 为 指数位,使用
      1019 − 1023 ( 2 10 − 1 = 1023 ) = − 4 1019 -1023 (2 ^ {10}-1 =1023)= - 4 101910232101=1023=4
    3. 1001100110011001100110011001100110011001100110011010 为尾数
      0.1001100110011001100110011001100110011001100110011010 转化为十进制是 0.6000000000000001 + 1 = 1.6000000000000001 0.6000000000000001 + 1 = 1.6000000000000001 0.6000000000000001+1=1.6000000000000001
      1 * 2 ^ -1 + 0 * 2 ^ -2 + 0 * 2 ^ -3 + 1 * 2 ^ -4  + 1 * 2 ^ -5
      1            0            0            1             1
      
    4. − 1 0 ∗ 1.6000000000000001 ∗ 2 − 4 ≈ 0.1 -1 ^ {0} * 1.6000000000000001 * 2 ^ {-4} \approx 0.1 101.6000000000000001240.1
    5. 0.1 + 0.2 为什么不等于 0.3 计算过程

你可能感兴趣的:(学习笔记)