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

计算机组成原理变形补码计算题_原码反码补码例题详解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…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • MacOS:Shell工具-Royal TSX

    MacOS:Shell工具-Royal TSX第一次使用 Mac 下的 Shell 软件 把使用过程做一个简单的记录 希望能帮到需要的朋友 Mac 下的 Shell 软件也有挺多 经过比较 在机器数量较小的情况下自用的免费软件 我选择了 RoyalTSX 一 官方的使用说明文档首先贴出下图是官方的使用说明文档作为参考 官方说明文档永远是最准确的资料 笔者的安装过程也是根据官方文档进行

    2025年6月5日
    4
  • 个人觉得好用的Xmind快捷键(mac)[通俗易懂]

    个人觉得好用的Xmind快捷键(mac)[通俗易懂]commandN新建脑图空格修改文字Delete删除文字commandZ撤销上一步Enter添加平行分支Tab添加子节点command+/-放大/缩小commandI上传图片command+Shift+H插入超链接command+1,2,3,4,5,6快速添加优先等级图标-收缩目前分支方向键展开当前分支…

    2022年6月5日
    80
  • kettle下载安装使用教程

    kettle下载安装使用教程Kettle简介Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行, 数据抽取高效稳定。Kettle中文名称叫水壶,该项目的主程序员MATT希望把各种数据放到一个壶里,然后以一种指定的格式流出。Kettle这个ETL工具集,它允许你管理来自不同数据库的数据,通过提供一个图形化的用户环境来描述你想做什么,而不是你想怎么做。Kettle中有两…

    2022年5月24日
    31
  • unity协程简介[通俗易懂]

    unity协程简介[通俗易懂]在Unity中,一般的方法都是顺序执行的,一般的方法也都是在一帧中执行完毕的,当我们所写的方法需要耗费一定时间时,便会出现帧率下降,画面卡顿的现象。当我们调用一个方法想要让一个物体缓慢消失时,除了在Update中执行相关操作外,Unity还提供了更加便利的方法,这便是协程。在通常情况下,如果我们想要让一个物体逐渐消失,我们希望方法可以一次调用便可在程序后续执行中实现我们想要的效果。我们希望代码…

    2022年6月20日
    41
  • javaweb权限管理简单实现_javaweb用户权限管理

    javaweb权限管理简单实现_javaweb用户权限管理推荐最新技术springboot版权限管理(java后台通用权限管理系统(springboot)),采用最新技术架构,功能强大!注:由于该项目比较老,所以没有采用maven管理,建议下载springboot权限管理系统,对学习和使用会更有帮助。springboot权限管理系统介绍地址:https://blog.csdn.net/zwx19921215/article/details/978……………

    2022年9月26日
    3
  • java StringTokenizer

    java StringTokenizerStringTokenizer是一个用来分隔String的应用类,相当于VB的split函数。1.构造函数publicStringTokenizer(Stringstr)publicStringTokenizer(Stringstr,Stringdelim)publicStringTokenizer(Stringstr,Stringdelim,boolean

    2022年8月11日
    7

发表回复

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

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