zoukankan      html  css  js  c++  java
  • 计算机进行加减法

    计算机的加减法操作都是以八个比特也就是一个字节为单元的 超过一个字节的数值的操作 要把数据以一个字节为单位划分N个数据来操作

    1 加法 

    二进制只有 0 和 1  两个数相加的情况

    AB结果进位
    1 0 1 0
    1 1 0 1
    0 0 0 0
    0 1 1 0

    上图为一个字节加法器的实现 低位的的进位输出作为下一位的进位输出 总的进位输出 放到一位锁存器里面 以便后续以每个字节为单元进行进位相加操作

    下图所示为4位16进制(16位二进制) 进行加法运算示意图  每个数据分类 低8位和高8位 第一个数据的低8位 先与第二个数据的低8位相加 结果和进位储存起来

    然后再把两者的高8位和低8位的进位相加起来 结果存出来 拼起来就是两个数值的和(如果整体有进位的话 会被抛弃

    2 减法 进行减法时候必须注意的就是:低位不够减要向高位借位,这个实现起来就比较复杂 但是有个办法可以不借位实现减法

                                              

    253-176 = 256 + 999-176 + 1-1000;

    999-176  叫做176 的十进制补码  同理二进制的减法也可以进行此操作 也就是而且只8位最大数位11111111 补码的求法相当于用1减去位上的数值 也就是如果是1 此为取补后1-1=0  如果是0取补后位1-0=1 也就是二进制的补码 就是此数值每位取反 所以两个数如果进行减法操作 输入端只要取法就行

    多个字节的减法同加法相似 也要考虑进位因为加法是减数的补码相加 所以低字节结果是由有进位可能的

    3 总结  

    1 如果两个不同长度数值相加系统会先较短的的前补0到与长的等同 一边划分量相同的 8位数相加

    2 数值相加是可能进位的 但是按照上面的理论 比如你加两个16位数 每个16位数 分成两个8位数(低位 和 高位) 低位进位输出可以放到高位的进位输入里 但是最高位的进位输出呢放到哪里?显然最高位的进位无法存储 所以加到 11111111 11111111  再加1 就会变为 00000000 00000000 这就是程序的溢出 

                                                                               The Hidden Language of Computer Hardware and Software 读后笔记 @wang

  • 相关阅读:
    阿里知识图谱首次曝光:每天千万级拦截量,亿级别全量智能审核
    LSTM简介以及数学推导(FULL BPTT)
    深度学习算法索引(持续更新)
    学界 | Yann LeCun新作,中日韩文本分类到底要用哪种编码?
    Android 常见内存泄漏的解决方式
    集成支付宝支付
    【4.29安恒杯】writeup
    sdut 3-7 类的友元函数的应用
    Linux下libsvm的安装及简单练习
    iOS 使用腾讯地图显示用户位置注意事项
  • 原文地址:https://www.cnblogs.com/china8036/p/4306294.html
Copyright © 2011-2022 走看看