计算机组成原理变形补码计算题_原码反码补码例题详解

计算机组成原理变形补码计算题_原码反码补码例题详解22.已知x和y,用变形补码计算x-y,同时指出结果是否溢出。(1)x=11011,y=-11111(2)x=10111,y=11011(3)x=11011,y=-1001124.已知x和y,用变形补码计算x+y,同时指出结果是否溢出。(1)x=11011,y=00011(2)x=11011,y=-10101(3)x=-10110,y=-00001#include<bits/stdc++.h>usingnamespace…


Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

22. 已知 x 和 y,用变形补码计算 x-y,同时指出结果是否溢出。

(1) x=11011,y=-11111

(2) x=10111,y=11011 

(3) x=11011,y=-10011

24. 已知 x 和 y,用变形补码计算 x+y,同时指出结果是否溢出。

(1)x=11011,y=00011
(2)x=11011,y=-10101
(3)x=-10110,y=-00001

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int question = 0;
string fu(string str) {
    if (str[0] == '0') {
        str.replace(0, 2, "11");
    } else {
        str.replace(0, 2, "00");
    }
    return str;
}
string fanMa(string str) {
    for (int i = 2; i < str.length(); i++) {
        if (str[i] == '0') {
            str[i] = '1';
        } else {
            str[i] = '0';
        }
    }
    return str;
}
// 正数的原码反码补码都一样, 负数补码是反码+1
string buMa(string str) {
    if (str[0] == '1') {
        str = fanMa(str);
        int flag = 1; // 标记要进位1
        for (int i = str.length() - 1; i >= 0; i--) {
            if (str[i] == '0') {
                if (flag) {
                    flag = 0;
                    str[i] = '1';
                }
            } else if (str[i] == '1') {
                if (flag) {
                    str[i] = '0';
                }
            }
        }
    }
    return str;
}
string minus1(string str) {
    // 相当于找到最后一个1变成0,最后一个1前的0都变成1
    int flag = -1;
    for (int i = str.length() - 1; i >= 0; i--) {
        if (str[i] == '0') {
            if (flag) {
                str[i] = '1';
            }
        } else if (str[i] == '1') {
            if (flag) {
                flag = 0;
                str[i] = '0';
            }
        }
    }
    return str;
}
// 从补码转到原码
string B2Y(string str) {
    string res;
    if (str[0] == str[1]) {
        if (str[0] == '0') {
            res = " +";
            res += str.substr(2);
        } else {
            res = " -";
            res += minus1(str.substr(2));
            res = fanMa(res);
        }
    } else {
        if (str[0] == '0') {
            res = "+";
            res += str.substr(1);
        } else {
            res = "-";
            res += minus1(str.substr(1));
            res = fanMa(res);
        }
    }
    return res;
}
void checkOverFlow(string str) {
    if (str.substr(0, 2) == "01") {
        cout << "正溢出" << endl;
    } else if (str.substr(0, 2) == "10") {
        cout << "负溢出" << endl;
    } else {
        cout << "未溢出" << endl;
    }
}
// 输入X和Y的原码, 计算结果
string Cal(string X, string Y, char oper = '+') {
    printf("\n(%d)\n", ++question);
    X = buMa(X);
    cout << "[X]补:   " << X << endl;
    if (oper == '-') {
        Y = fu(Y);
    }
    Y = buMa(Y);
    if (oper == '-') {
        cout << "[-Y]补:  " << Y << endl;
    } else {
        cout << "[Y]补:   " << Y << endl;
    }
    int flag = 0; // 标记是否要进位
    for (int i = X.length() - 1; i >= 0; i--) {
        int cur = X[i] - '0' + Y[i] - '0' + flag;
        if (cur > 1) {
            flag = 1;
        } else {
            flag = 0;
        }
        if (cur & 1) {
            X[i] = '1';
        } else {
            X[i] = '0';
        }
    }
    printf("------------------\n");
    cout << "[X" << oper << "Y]补: " << X << endl;
    cout << " X" << oper << "Y   : " << B2Y(X) << endl;
    checkOverFlow(X);
    return X;
}

int main() {
    system("chcp 65001");
    cin.tie(0);
    cout.tie(0);
    // bitset<7> a(27);
    // string strX = a.to_string();
    Cal("0011011", "0000011");
    Cal("0011011", "1110101");
    Cal("0011011", "1110011", '-');
    return 0;
}

计算机组成原理变形补码计算题_原码反码补码例题详解

 

nt布置你马的那么多题目…

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/179210.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • 双机流水作业调度问题——Johnson算法「建议收藏」

    双机流水作业调度问题——Johnson算法「建议收藏」概述流水作业是并行处理技术领域的一项关键技术,它是以专业化为基础,将不同处理对象的同一施工工序交给专业处理部件执行,各处理部件在统一计划安排下,依次在各个作业面上完成指定的操作。流水作业调度问题是一个非常重要的问题,其直接关系到计算机处理器的工作效率。然而由于牵扯到数据相关、资源相关、控制相关等许多问题,最优流水作业调度问题处理起来非常复杂。已经证明,当机器数(或称工序数)大于等于3时,流水作业调度问题是一个NP-hard问题(e.g分布式任务调度)。粗糙地说,即该问题至少在目前基本上没有可能找到多项

    2022年11月1日
  • SpringBoot+SpringCloud面试题整理

    SpringBoot+SpringCloud面试题整理什么是SpringBoot?1、用来简化spring初始搭建和开发过程使用特定的方式进行配置(properties或者yml文件)2、创建独立的spring引用程序main方法运行3、嵌入Tomcat无需部署war包,直接打成jar包nohupjava-jar–&amp;启动就好4、简化了maven的配置4、自动配置spring添加对应的starter自动化配置SpringB…

    2022年6月3日
  • 修改SystemUI反编译的smali实现隐藏导航栏「建议收藏」

    修改SystemUI反编译的smali实现隐藏导航栏「建议收藏」记录

    2022年9月17日
  • U盘中毒了?教你如何删除System Volume Information这个顽固文件夹「建议收藏」

    U盘中毒了?教你如何删除System Volume Information这个顽固文件夹「建议收藏」不得不说cmd命令很好用呢。最近我的U盘中毒了,格式化都删除不了SystemVolumeInformation这个顽固的文件夹,真心伤不起哇!还好现在解决了问题。看来以后得好好对待U盘,不能乱用了。本篇文章教大家如何删除SystemVolumeInformation这个顽固文件夹。希望对你有用。我的电脑是win10,win+R搜索cmd,启用cmd命令编辑器,并输入以下命令:attrib…

    2022年9月17日
  • 数据结构和算法_数据库原理考试题库

    数据结构和算法_数据库原理考试题库前言2016年又是一个全新的开始,每到一年的这个时候,总是颇有感慨。想对过去的一年做一些总结,但又觉得经历和精力总是不够。俗话说,一年之计在于春,当然,新的一年,也总是计划着N多事情,想做什么事情

    2022年8月1日
  • 中文情感词库_情感识别

    中文情感词库_情感识别目录一一

    2022年8月23日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号