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

计算机组成原理变形补码计算题_原码反码补码例题详解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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • LUCENE3.0 自学吧 5 TokenStream

    LUCENE3.0 自学吧 5 TokenStream
    研究Lucene分析器的实现。
    Analyzer抽象类
    所有的分析器的实现,都是继承自抽象类Analyzer,它的源代码如下所示:
    packageorg.apache.lucene.analysis;importjava.io.Reader;publicabstractclassAnalyzer{//通过Field的名称,和一个Reader对象,创建一个分词流,该方法是抽象方法publicabstractTokenStrea

    2022年7月22日
    8
  • live555 h265_live555推流rtsp

    live555 h265_live555推流rtsp基于live555的视频直播DM368IPNCRTSP分析本文是我对TIDM368IPNCRTSP直播部分的代码分析。approIPNC视频流直播部分用的RTSP,基于live555,通过改写wis-streamer实现的,在live555官网上有wis-streamer的代码下载,appro将其修改,在framedsource中加入了GetAVData接口,这样i

    2022年8月13日
    5
  • c语言基础题库及详解答案_char和uint8

    c语言基础题库及详解答案_char和uint8uint32_t是一个32位的无符号整型。使用这个类型需要加上头文件#include<stdint.h>unsignedint32_t是错误的写法。%x是以16进制的形式来输出例子:我有一个32位的无符号整型的数,我想知道高16位和低16位相加的和是多少,结果以16进制输出?#include<stdio.h>#include<stdlib.h>#include<stdint.h>intmain(){uint3

    2025年8月27日
    6
  • 基于OpenCv的人脸识别(Python完整代码)

    基于OpenCv的人脸识别(Python完整代码)目前人脸识别有很多较为成熟的方法,这里调用OpenCv库,而OpenCV又提供了三种人脸识别方法,分别是LBPH方法、EigenFishfaces方法、Fisherfaces方法。本文采用的是LBPH(LocalBinaryPatternsHistogram,局部二值模式直方图)方法。opencv是一个开源的的跨平台计算机视觉库,内部实现了图像处理和计算机视觉方面的很多通用算法,对于python而言,在引用opencv库的时候需要写为importcv2。其中,cv2是opencv的C++命名空间名称

    2022年6月7日
    51
  • java uniqueresult_关于query.uniqueResult报错问题

    java uniqueresult_关于query.uniqueResult报错问题publicfloatcountmonthmoney(Longblogid){java.text.SimpleDateFormatsf=newjava.text.SimpleDateFormat(“yyyyMM”);Stringtoday=sf.format(newjava.util.Date());StringBuilderstring…publicfloatcountmonthmone…

    2022年9月30日
    2
  • 微型四旋翼飞行器设计经验之瞎扯淡[通俗易懂]

    在正式开始记录微型四旋翼飞行器设计的学习笔记之前,感觉自己很有必要先给自己一个总结,也希望能够帮到更多的朋友少走弯路(虽然不知道帮助大不大)。去年九月下旬开始了微型四旋翼飞行器的学习与设计,在12月底的时候初步实现了稳定的遥控与飞行,后续又增加了一些常规的辅助的功能,失控保护、姿态微调等等,之后又利用OLED屏幕,设计了一个三级菜单,把各种参数的设置,飞控锁定与通讯的状态等等一些信息都整合在一

    2022年4月10日
    80

发表回复

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

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