# 计算机组成原理 **Repository Path**: guibinbin/computer_organization ## Basic Information - **Project Name**: 计算机组成原理 - **Description**: 计算机组成原理 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-10-16 - **Last Updated**: 2023-10-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 计算机组成原理 ## 软考 2016 上半年 上午 第3题 ![1697424169872](image/README/1697424169872.png) ### 知识点 ``` N = M R^E - M: 尾数 - 数符 是 尾数的符号位 - 阶符 是 阶的 符号位 - R^E 是 阶数 - E 是阶码 根科学计数法一个道理 10 = 1 * 10 ^ 1 120 = 1.2 * 10 ^ 2 ``` ![1697424539698](image/README/1697424539698.png) ### 二进制减法 ![1697428617781](image/README/1697428617781.png) ``` 1. 最大小数 为什么是 0.111...1 ? 1-2^-n 呢? 我们当成十进制来看 如果我们要表示 一个小数的取值范围,则有 -0.9 ~ 0.9 因为 -0.9 再 加多 -0.1 就变成整数部分了 -127/128 ~ 127/128 也是同理 所以我们的小数的取值范围可以写成 -(1-1/128) ~ 1-1/128 同理可得: => -(1 - 2^-7) ~ 1 - 2^-7 2. 为什么负数的最小值是 1.000...0 呢? 1. 对于定点整数 设位数一共为8位 原码表示范围为 -127-127,即1111 1111~0111 1111 反码表示范围为 -127-127,即1000 0000~0111 1111 补码表示范围为 -128-127,即1000 0000~0111 1111 我们可以尝试求一下-128的原码, 但可以发现7位二进制表示不出来,必须得用8位二进制表示,但这样符号位就被占用了。 但由于上面说的补码比原码和补码少一个0的表示方法,这就让补码多了一个10000000来表示其他的数,这里具体的细节我也不是很懂@_@,但可以这样记吧,-1到-127已经有对应的原码和补码了,所以也会有对应的补码,而10000000首位是1代表负数,不能和其他数的表示起冲突所以就是-128了。由此,补码可以表示128个负数,1个0以及127个负数共256个数 2. 对于定点小数 还是设位数一共8位 原码表示范围为1.111 1111 ~0.111 1111,即-127/128到127/128 反码表示范围为1.000 0000~0.111 1111,即-127/128到127/128 补码表示范围为1.000 0000~0.111 1111,即-1到127/128 在这里原码和反码都好理解,就是补码会有一个问题, 为什么补码会有一个1.000 0000而且居然对应的值是-1, 也就是说如果小数用补码表示的话最小值是-1。这里如果用一开始说的取反加一你会发现根本不是这个值。之后才知道取反加一靠的是原码, 但看前面原码的定义公式你会发现 原码根本表示不了定点小数-1, 原码所能表示的是定点整数-1, 定点小数-1这里严谨一点的话其实是-1.0。 3. 规格化浮点数: - 原码: X.1XXX - 补码: - 正数: 0.1XXX - 负数: 1.0XXX ``` ``` - 16 位 浮点数 | 阶符 | 阶码 | 数符 | 尾数 | | 1 | 6 | 1 | 8 | 尾数 用 补码表示 阶码 用 移码表示 求 取值范围 则是从 最小的 到 最大的部分 的数 (1)最小的 N = M R ^ E 因为是二进制所以 R = 2 尾数(补码表示): 最小的小数是 1.00000000 阶码(移码表示): 最大的整数: 1,111111 => 2 ^ 6 - 1 = 63 所以 最小的值为: -1 * 2 ^ 63 (2)最大的 尾数(补码): 最大的小数 0,111111 => (1 - 2 ^ -8) 阶码(移码): 1,111111 => 2 ^ 6 - 1 = 63 所以 最大值为: (1-2^-8) * 2 ^ 63 ```