• 【计算机组成原理】加减运算和溢出判断


    加减运算可以分为原码和补码两种方式。
    (默认8位二进制运算)

    原码的加法与减法

    被加数和加数有四种可能出现的结果:

    正+正、正+负、负+正、负+负

    被减数和减数有四种可能出现的结果:

    正-正、正-负、负-正、负-负

    正+正 、负+负

    使用绝对值进行相加、但结果不同。

    正数相加为正数、负数相加为负数。需要改变符号位的正负表示。

    结果可能会溢出

    正+负、负+正

    使用绝对值大的数减去绝对值小的数。符号和绝对值大的数相同。

    正-负 、负-正

    正数减负数:将负数取绝对值,然后相加

    负数减正数:将正数取相反数,然后相加

    负-负、正-正

    负减负:将减数取绝对值进行相加操作

    正减正:将减数取相反数进行相加操作

    补码的加法与减法

    设机器字长为8位(含一号符号位),A=15,B=-24,求[A+B]和[A-B]

    ​ 原码 补码

    A=+1111 -> 00001111 -> 00001111

    B=-11000 -> 10011000 -> 11101000

    -B = +11000 -> 00011000 -> 00011000

    [A+B] = [A] + [B] = 00001111 + 11101000 = 11110111

    该补码的原码为 10001001 :-9

    负数补码转化原码:

    1、数值位取反加一

    2、最右边的一及其右边不变,左边的数值位取反。

    [A-B] = [A] + [-B] = 00001111 + 00011000 = 00100111

    该补码的原码为 :00100111=39

    溢出判断

    符号位变化即发生溢出

    若C为124.求 [A+C]和[B-C]

    [A+C]: 00001111 + 01111100 = 10001011 真值为-117溢出(应为139

    [B-C]: 11101000 + 10000100 = 01101100 真值为+108溢出(应为-148

    8位补码表示:-128~127

    若两个正数相加超过127变为负数或两个负数相加低于-128变为正数就会发生上溢和下溢。

    方法一

    使用A表示被加数的正负、B表示加数的正负、S表示结果的正负。溢出逻辑表达式为:

    V = AB[S] + [A][B]S

    若V=0,表示无溢出。

    若V=1,表示有溢出。

    逻辑与,都为1才为1

    逻辑或,都为0才为0

    逻辑非,相反

    方法二

    根据进位情况判断是否发生溢出。

    若符号位为0,数值位往符号位进1,发生上溢。

    若符号位为1,数值位往符号位进0,发生下溢。

    异或结果为1表示有溢出,为0表示没有溢出。

    方法三(重要一些)

    双符号位表示数据(实际只存储一种符号位,运算时会复制一个符号位)

    正数符号位为00,负数符号位为11。

    若为01发生上溢,若为10发生下溢。

    双符号位:模4补码

    单符号位:模2补码

    符号扩展

    将数据从int转为long:

    正数:

    0,1011010

    只需要在前面补0

    0,000000001011010

    原码反码补码都一样

    负数:

    原:1,1011010 在1后面补8个0 , 1,000000001011010

    反:1,0100101 在1后面补8个1 , 1,111111110110101

    补:1,0100110 在1后面补8个1,1,111111110110110

    正小数:

    原码反码补码都一样

    尾部补0

    0.1011010 -> 0.101101000000000

    负小数:

    原:1.1011010 在后面补8个0 , 1.101101000000000

    反:1.0100101 在后面补8个1 , 1,011010111111111

    补:1.0100110 在后面补8个0,1.011011000000000

  • 相关阅读:
    使用Docker/K8S/Helm部署项目流程
    Linux 环境Skywalking部署Elasticsearch
    Linux yum,vim详解
    设计模式SOLID
    块设备 I/O 请求送达到外部设备
    JVM垃圾回收机制
    Flink---14、Flink SQL(SQL-Client准备、流处理中的表、时间属性、DDL)
    22:第三章:开发通行证服务:5:联调【发送短信,接口】,解决跨域问题;(使用CorsFilter过滤器,在Spring Boot上解决跨域访问问题;)
    最全百科:什么是精益生产?有哪些难点?怎么解决?
    转载-Blazor Debugging Improvements in Rider 2021.2
  • 原文地址:https://blog.csdn.net/weixin_45755831/article/details/127434606