国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

用補(bǔ)碼計(jì)算x+y,并判斷結(jié)果是否溢出問(wèn)題

這篇具有很好參考價(jià)值的文章主要介紹了用補(bǔ)碼計(jì)算x+y,并判斷結(jié)果是否溢出問(wèn)題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

  • 作者簡(jiǎn)介:一名后端開(kāi)發(fā)人員,每天分享后端開(kāi)發(fā)以及人工智能相關(guān)技術(shù),行業(yè)前沿信息,面試寶典。
  • 座右銘:未來(lái)是不可確定的,慢慢來(lái)是最快的。
  • 個(gè)人主頁(yè):極客李華-CSDN博客
  • 合作方式:私聊+
  • 這個(gè)專(zhuān)欄內(nèi)容:BAT等大廠常見(jiàn)后端java開(kāi)發(fā)面試題詳細(xì)講解,更新數(shù)目100道常見(jiàn)大廠java后端開(kāi)發(fā)面試題。
  • 我的CSDN社區(qū):https://bbs.csdn.net/forums/99eb3042821a4432868bb5bfc4d513a8
  • 微信公眾號(hào),抖音,b站等平臺(tái)統(tǒng)一叫做:極客李華,加入微信公眾號(hào)領(lǐng)取各種編程資料,加入抖音,b站學(xué)習(xí)面試技巧,職業(yè)規(guī)劃

前言:浮點(diǎn)數(shù)的加減法與是否溢出的判斷,是計(jì)算機(jī)組成原理中的數(shù)據(jù)存儲(chǔ)的一個(gè)入門(mén)。
題目:已知x和y,用變形補(bǔ)碼計(jì)算x+y,并判斷結(jié)果是否溢出。
(1)x = 0.11010, y = 0.10111
(2)x = 0.11101, y = -0.10100
(3)x = -0.10111, y = -0.11000

計(jì)算方法很簡(jiǎn)單,就是先把x, y轉(zhuǎn)換成補(bǔ)碼,然后補(bǔ)碼相加就可以,計(jì)算機(jī)的計(jì)算中都是把減法當(dāng)做加法使用。對(duì)于負(fù)數(shù)那么就在原來(lái)的基礎(chǔ)之上前面加一個(gè)1,作為符號(hào)位,然后符號(hào)位不變?cè)偃》醇右弧?br>
比如
對(duì)于(2)題
-0.11010->10.11010->11.00101->11.00110

然后相加,結(jié)果為
00.11101+11.00110=00.01001
至于溢出情況,如果01就是正溢出,00,11未溢出,10負(fù)溢出。

知道原理了,然后我們就可以寫(xiě)代碼了。


我的代碼如下

#include<bits/stdc++.h>
using namespace std;

string Complement(string code) // 對(duì)二進(jìn)制浮點(diǎn)數(shù)求補(bǔ)碼
{
    string t = '1' + code;
    // 是否進(jìn)位
    bool flag = false;
    
    // 先求反碼
    for (int i = t.size() - 1; i >= 1; -- i)
    {
        if (t[i] == '.') continue;
        if (t[i] == '0') t[i] = '1';
        else t[i] = '0';
    }
    // cout << "反碼為:" + t << endl;
    // 再加1
    
    for (int i = t.size() - 1; i >= 1; -- i)
    {
       // cout << "補(bǔ)碼為:" + t << endl;
        if (t[i] == '.') continue;
        if (i == t.size() - 1) // 求反加1
        {
            if (t[i] == '1')
            {
                flag = true;
                t[i] = '0';    
            }
            else t[i] = '1';
        }
        else 
        {
            if (flag == true) // 有進(jìn)位
            {
                if (t[i] == '0') // 不需要進(jìn)位
                {
                    flag = false;
                    t[i] = '1';    
                }
                else        // 需要進(jìn)位
                {
                    flag = true;
                    t[i] = '0';
                }
            }
            
        }
    }
    // cout << "補(bǔ)碼為:" + t << endl;
    return t;
}

string Add(string x, string y) // 補(bǔ)碼相加
{
    bool flag = false; // 判斷是否進(jìn)位
    string res = "";
    for (int i = x.size() - 1; i >= 0; -- i)
    {
        // cout << "res :" + res << " ";
        // if (flag) cout << "true\n";
        // else cout << "false\n";

        if (x[i] == '.') 
        {
            
            res += '.';
            continue;
        }
        if (x[i] == y[i] && x[i] == '1') 
        {
            if (flag) res += '1';
            else res += '0';
            flag = true;
        }
        else if (x[i] == y[i] && x[i] == '0')
        {
            if (flag)
            {
                res += '1';
                flag = false;
            }
            else res += '0';
        }
        else if (x[i] != y[i]) // 兩個(gè)不同
        {
            if (flag) // 有進(jìn)位
            {
                flag = true;
                res += '0';
            }
            else // 沒(méi)有進(jìn)位
            {
                flag = false;
                res += '1';
            }
        }
    }
    reverse(res.begin(), res.end());
    return res;
}

string Jude(string res) // 判斷是否溢出
{
    if (res[0] == res[1]) return "未溢出";
    else if (res[0] == '1') return "負(fù)溢出";
    else return "正溢出";
}

int main()
{

    string x, y;
    string res = "";
    cout << "輸入x:";
    cin >> x;
    cout << "輸入y:";
    cin >> y;
    string tx = x;
    string ty = y;
    if (x[0] == '-') // 如果是負(fù)數(shù) 那么它的補(bǔ)碼就需要變一下
    {
        tx = Complement(x.substr(1));
    }
    else tx = '0' + x;
    if (y[0] == '-')// 如果是負(fù)數(shù) 那么它的補(bǔ)碼就需要變一下
    {
        ty = Complement(y.substr(1));
    }
    else ty = '0' + y;
    
    // res = Add(tx, ty);    // 這部分為計(jì)算[x+y]的情況
    // cout << "\n[x + y]補(bǔ)=" + res + '\n';
    // cout << "溢出情況為:" + Jude(res) + '\n';
    

    if (y[0] == '-')  // // 這部分為計(jì)算[x-y]的情況
    {
        y[0] = '0';
        res = Add(tx, y);
    }
    else res = Add(tx, Complement(y));
    cout << "[x - y]補(bǔ)=" + res + '\n';
    cout << "溢出情況為:" + Jude(res) + '\n';
    return 0; 
}

測(cè)試結(jié)果如下:

用補(bǔ)碼計(jì)算x+y,并判斷結(jié)果是否溢出問(wèn)題
用補(bǔ)碼計(jì)算x+y,并判斷結(jié)果是否溢出問(wèn)題
用補(bǔ)碼計(jì)算x+y,并判斷結(jié)果是否溢出問(wèn)題
如果大家覺(jué)得有用的話(huà),可以關(guān)注我下面的微信公眾號(hào),極客李華,我會(huì)在里面更新更多行業(yè)資訊,企業(yè)面試內(nèi)容,編程資源,如何寫(xiě)出可以讓大廠面試官眼前一亮的簡(jiǎn)歷,讓大家更好學(xué)習(xí)編程,我的抖音,B站也叫極客李華。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-506972.html

到了這里,關(guān)于用補(bǔ)碼計(jì)算x+y,并判斷結(jié)果是否溢出問(wèn)題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包