计算机组成原理变形补码计算题_原码反码补码例题详解大学如何自学计算机科学与技术

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 fustring str) {
    if str[0] == '0') {
        str.replace0, 2, "11");
    } else {
        str.replace0, 2, "00");
    }
    return str;
}
string fanMastring str) {
    for int i = 2; i < str.length); i++) {
        if str[i] == '0') {
            str[i] = '1';
        } else {
            str[i] = '0';
        }
    }
    return str;
}
// 正数的原码反码补码都一样, 负数补码是反码+1
string buMastring str) {
    if str[0] == '1') {
        str = fanMastr);
        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 minus1string 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 B2Ystring str) {
    string res;
    if str[0] == str[1]) {
        if str[0] == '0') {
            res = " +";
            res += str.substr2);
        } else {
            res = " -";
            res += minus1str.substr2));
            res = fanMares);
        }
    } else {
        if str[0] == '0') {
            res = "+";
            res += str.substr1);
        } else {
            res = "-";
            res += minus1str.substr1));
            res = fanMares);
        }
    }
    return res;
}
void checkOverFlowstring str) {
    if str.substr0, 2) == "01") {
        cout << "正溢出" << endl;
    } else if str.substr0, 2) == "10") {
        cout << "负溢出" << endl;
    } else {
        cout << "未溢出" << endl;
    }
}
// 输入X和Y的原码, 计算结果
string Calstring X, string Y, char oper = '+') {
    printf"\n%d)\n", ++question);
    X = buMaX);
    cout << "[X]补:   " << X << endl;
    if oper == '-') {
        Y = fuY);
    }
    Y = buMaY);
    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   : " << B2YX) << endl;
    checkOverFlowX);
    return X;
}

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

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

 

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

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

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