当前位置: 首页 > article >正文

计算机组成原理==初识二进制运算

计算机组成原理

计算机算术概要

计算机算术是计算机组成原理中的一个重要部分,它涉及在计算机硬件中执行基本数学运算的方法和技术。计算机算术不仅包括简单的加减乘除运算,还包括更复杂的操作如浮点运算、位运算等。

1. 基本概念

  • 数制:计算机内部通常使用二进制(基数为2)进行运算,但也有八进制(基数为8)、十六进制(基数为16)等形式用于简化表示。
  • 补码表示:为了处理负数,计算机通常采用补码形式来表示整数。补码使得加法和减法可以统一成加法操作。

2. 整数运算

  • 加法:直接的二进制加法,需要注意溢出问题。
  • 减法:通过加上负数的补码实现。
  • 乘法:可以通过多次移位和加法实现。
  • 除法:可以通过重复的减法或移位和减法实现。
  • 取模:除法运算的副产品,得到的是余数。

3. 浮点运算

  • IEEE 754标准:定义了浮点数的格式,包括单精度(32位)和双精度(64位)。
  • 浮点加减法:需要对齐指数,然后进行尾数的加减。
  • 浮点乘除法:指数相加/减,尾数相乘/除,最后调整结果以符合规格化要求。

4. 逻辑运算与位运算

  • 逻辑运算:包括AND、OR、NOT等,通常用于条件判断。
  • 位运算:包括按位AND、OR、XOR、NOT以及移位操作,这些操作直接作用于数据的二进制位上。

5. 算术逻辑单元(ALU)

  • 功能:ALU是CPU的一部分,负责执行所有的算术和逻辑运算。
  • 设计:ALU的设计包括多个子模块,每个子模块处理特定类型的运算,例如加法器、多路选择器等。

6. 运算优化

  • 并行计算:利用硬件的并行性提高运算速度。
  • 流水线技术:将一个长的操作分解为多个小步骤,并让不同阶段同时工作。
  • 专用硬件:例如FPU(浮点运算单元)专门用来加速浮点运算。

7. 错误检测与纠正

  • 奇偶校验:通过添加额外的位来检测错误。
  • 海明码:不仅可以检测错误,还可以纠正单个比特的错误。

8. 特殊情况

  • 溢出:当运算结果超出表示范围时发生。
  • 下溢:当数值变得太小而无法准确表示时发生。
  • 舍入误差:在浮点运算中由于有限精度造成的误差。

计算机算术是计算机科学和工程的基础之一,理解这些概念对于开发高效的软件和设计高性能的硬件都非常重要。随着技术的发展,新的算法和硬件架构不断出现,以进一步提高计算效率和准确性。

二进制的运算

请添加图片描述

二进制乘法运算

二进制乘法运算遵循与十进制乘法相似的原则,但操作更为简单,因为只涉及0和1两个数字。在二进制中,任何数乘以0的结果是0,任何数乘以1的结果是它本身。当进行多位数相乘时,同样需要考虑位的对齐和进位的问题。

下面是一个简单的二进制乘法实例解析:

假设我们要计算二进制数 1011(等价于十进制的11)与 1101(等价于十进制的13)的乘积。

请添加图片描述

步骤如下:

      1011
   x  1101
   ________
      1011   (这是1011 * 1)
     0000    (左移一位,并且1011 * 0 = 0000)
    1011     (再左移一位,相当于1011 * 1)
 + 1011      (最后左移三位,相当于1011 * 1)
________
10001111

解释每一行:

  • 第一行是直接将1011乘以最右边的1。
  • 第二行是将1011左移一位(相当于乘以2),然后乘以0,所以结果为0000。
  • 第三行再次左移一位(相当于乘以4),这次是乘以1,所以得到1011。
  • 第四行则是把1011左移三位(相当于乘以8),同样是乘以1,因此又得到了1011。

然后我们把这些结果加起来,注意要按照二进制加法规则处理进位问题。最终结果是10001111,这个二进制数转换成十进制就是143,确实等于11 * 13。

为了确保正确性,可以将最终的二进制结果转换回十进制来验证:10001111 = 12^7 + 02^6 + 02^5 + 02^4 + 12^3 + 12^2 + 12^1 + 12^0 = 128 + 8 + 4 + 2 + 1 = 143。

这就是一个完整的二进制乘法过程及其实例解析。

二进制补码=原码取反+1

  • 二进制补码正数左移一位相当于二倍扩展
  • 二进制右移相当于除以2

移位操作

请添加图片描述

快速乘法

构造逻辑矩阵

二进制除法运算

好的,让我们通过一个非常详细的步骤来展示二进制除法。我们将使用相同的例子:10101100(88)除以1100(12)。这个过程将被分解为多个小步骤,并且每一步都会详细解释。

步骤 1: 设置除法布局

       __________
   1100 | 10101100

步骤 2: 比较并确定商的第一位

  • 我们从最左边开始比较,10101100小,所以我们需要考虑更多的位数。
  • 考虑10101,它仍然小于1100
  • 现在考虑101011,它大于1100,因此我们可以进行第一次减法。

步骤 3: 第一次减法

  • 商的第一位是1,因为101011可以容纳1100至少一次。
  • 执行减法:101011 - 1100 = 10011
  • 将结果写下来:
       1
   1100 | 10101100
        - 1100
        _______
         10011

步骤 4: 下移一位并继续比较

  • 将余数10011向下移动一位,加上下一位数字0,得到100110
  • 100110大于1100,所以商的下一位也是1。
  • 执行减法:100110 - 1100 = 10110
  • 更新除法布局:
       11
   1100 | 10101100
        - 1100
        _______
         100110
        - 1100
        _______
          10110

步骤 5: 再次下移一位并继续比较

  • 将余数10110向下移动一位,加上最后一位0,得到101100
  • 101100大于1100,所以商的下一位也是1。
  • 执行减法:101100 - 1100 = 10000
  • 更新除法布局:
       111
   1100 | 10101100
        - 1100
        _______
         100110
        - 1100
        _______
          101100
         - 1100
        _______
           10000

步骤 6: 结束条件

  • 此时,剩余的10000已经不足以再减去1100了,因此我们停止除法运算。
  • 最终的商是111(等于十进制的7),余数是10000(等于十进制的16)。

总结:

  • 商是111(7)
  • 余数是10000(16)

这就是整个二进制除法的过程,每一步都尽可能地详细展示了。

浮点数的运算

请添加图片描述

在IEEE 754标准中的运算规则

浮点数运算是计算机科学中的一个重要主题,尤其是在数值计算、科学计算和工程应用中。IEEE 754标准定义了浮点数的表示方法以及运算规则,确保了不同平台之间的一致性。

浮点数的表示

在IEEE 754标准中,浮点数通常以单精度(32位)或双精度(64位)格式存储。一个浮点数由三个部分组成:

  • 符号位(S):1位,0表示正数,1表示负数。
  • 指数(E):8位(单精度)或11位(双精度),用于表示基数2的幂。
  • 尾数(M):23位(单精度)或52位(双精度),用于表示小数部分。

浮点数加减法

浮点数加减法的基本步骤如下:

  1. 对齐指数

    • 比较两个操作数的指数。
    • 将较小指数的操作数的尾数向右移位,直到两个操作数的指数相等。每次右移一位,指数增加1。
  2. 执行加减法

    • 对齐后的尾数进行加法或减法运算。
    • 如果结果的最高位是1,则需要进行规格化处理,即将结果左移一位,并相应地减少指数。
  3. 规格化

    • 确保结果的尾数在[1, 2)范围内。如果不在这个范围内,需要进行规格化处理。
    • 规格化可能涉及多次移位和调整指数。
  4. 舍入

    • 根据IEEE 754标准选择合适的舍入模式(如向最近偶数舍入)。
    • 舍入可能会导致尾数溢出,此时需要再次调整指数。
  5. 检查异常

    • 检查结果是否为无穷大、NaN(非数字)、下溢或上溢。

浮点数乘除法

浮点数乘除法的基本步骤如下:

  1. 处理符号位

    • 乘法时,两数符号位异或得到结果的符号位。
    • 除法时,被除数符号位与除数符号位异或得到结果的符号位。
  2. 处理指数

    • 乘法时,两数指数相加。
    • 除法时,被除数指数减去除数指数。
  3. 处理尾数

    • 乘法时,两数尾数相乘。
    • 除法时,被除数尾数除以除数尾数。
  4. 规格化

    • 乘法后,结果尾数可能超过[1, 2)范围,需要右移并增加指数。
    • 除法后,结果尾数可能小于1,需要左移并减少指数。
  5. 舍入

    • 根据IEEE 754标准选择合适的舍入模式。
    • 舍入可能会导致尾数溢出,此时需要再次调整指数。
  6. 检查异常

    • 检查结果是否为无穷大、NaN、下溢或上溢。

舍入模式

IEEE 754标准定义了几种舍入模式:

  • 向最近偶数舍入(Round to Nearest, Ties to Even):默认模式,向最近的值舍入;如果距离相等,则舍入到最接近的偶数。
  • 向零舍入(Round Toward Zero):总是向零方向舍入。
  • 向上舍入(Round Up):总是向正无穷方向舍入。
  • 向下舍入(Round Down):总是向负无穷方向舍入。

异常情况

  • 无穷大:当结果超出表示范围时。
  • NaN:非法操作的结果,例如0/0。
  • 下溢:结果太小而无法表示。
  • 上溢:结果太大而无法表示。

实际实现

现代处理器通常包含专门的浮点运算单元(FPU)来高效执行这些运算。FPU会优化上述步骤,并且能够处理复杂的算术运算,如三角函数、对数等。

通过理解这些基本原理,你可以更好地掌握浮点数运算的工作方式,并在编写程序时考虑到浮点数运算的精度和性能问题。


http://www.kler.cn/a/316815.html

相关文章:

  • 数据结构-集合
  • 轻松上手:使用Docker部署Java服务
  • 词嵌入方法(Word Embedding)
  • 编译ffmpeg动态库时设置RPATH为$ORIGIN
  • Linux第四讲:Git gdb
  • 【2024最新】math-expression-evaluator 动态计算表达式的使用
  • Redisson分布式锁主从一致性问题
  • CentOS修改主机名
  • 【已解决】如何使用JAVA 语言实现二分查找-二分搜索折半查找【算法】手把手学会二分查找【数据结构与算法】
  • 用Qt 对接‌百度AI平台
  • 响应式流规范
  • 胤娲科技:谷歌DeepMind祭出蛋白质设计新AI——癌症治疗迎来曙光
  • DoppelGanger++:面向数据库重放的快速依赖关系图生成
  • JavaScript语法特点
  • linux 使用mdadm 创建raid0 nvme 磁盘
  • 深入理解SpringBoot(一)----SpringBoot的启动流程分析
  • 邮储银行:面向金融行业的移动应用安全风险监测案例
  • 【docker】命令之容器操作
  • C++:布尔类型,引用,堆区空间
  • 力扣232:用栈实现队列
  • 【Proteus仿真】基于51单片机的宠物喂食系统设计
  • JSON合并工具
  • JVM-类加载器的双亲委派模型详解
  • 前后端数据交互 笔记03(get和post方法)
  • 使用 Azure Functions 开发 Serverless 应用:详解与实战
  • LeetCode 1014. 最佳观光组合 一次遍历数组,时间复杂度O(n)