計(jì)算機(jī)系統(tǒng)基礎(chǔ):實(shí)驗(yàn)3-創(chuàng)新互聯(lián)

計(jì)算機(jī)系統(tǒng)基礎(chǔ):實(shí)驗(yàn)3 同符號(hào)浮點(diǎn)數(shù)加法運(yùn)算/無(wú)符號(hào)定點(diǎn)數(shù)乘法運(yùn)算的機(jī)器級(jí)表示

提示:根據(jù)《計(jì)算機(jī)系統(tǒng)基礎(chǔ)》 中給出的解釋來(lái)解決更容易,看一下p73頁(yè)能更簡(jiǎn)單理解

成都創(chuàng)新互聯(lián)專(zhuān)注于成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷(xiāo)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站制作、網(wǎng)站開(kāi)發(fā)。公司秉持“客戶(hù)至上,用心服務(wù)”的宗旨,從客戶(hù)的利益和觀點(diǎn)出發(fā),讓客戶(hù)在網(wǎng)絡(luò)營(yíng)銷(xiāo)中找到自己的駐足之地。尊重和關(guān)懷每一位客戶(hù),用嚴(yán)謹(jǐn)?shù)膽B(tài)度對(duì)待客戶(hù),用專(zhuān)業(yè)的服務(wù)創(chuàng)造價(jià)值,成為客戶(hù)值得信賴(lài)的朋友,為客戶(hù)解除后顧之憂(yōu)。

題目要求:

  1. 能夠用C語(yǔ)言仿真浮點(diǎn)數(shù)加法器的運(yùn)算過(guò)程
  2. 能夠用C語(yǔ)言仿真無(wú)符號(hào)數(shù)乘法器的運(yùn)算過(guò)程

#include#includefloat addfloat(char float1[], char float2[], int m, int n);
unsigned mul(char int1[], char int2[], int m, int n);
float floatToValue(char binary[],int count);//浮點(diǎn)數(shù)的10進(jìn)制轉(zhuǎn)換
int calExponent(char float1[], char float2[]);//對(duì)階
int shiftRight(char wei1_re[]);// 計(jì)算右規(guī)
void unsignedAdd(char wei1[],char wei2[],char wei_re[]);//計(jì)算無(wú)符號(hào)數(shù)相加

int main(){ // 浮點(diǎn)數(shù)加法器
//    char float1[33];
//    char float2[33];
//    printf("浮點(diǎn)數(shù):\n");
//    fgets(float1,33,stdin);
//    scanf("\n");
//    fgets(float2,33,stdin);
//    int m = 0,n = 0;
//    float result = addfloat(float1,float2,m,n);
//    printf("結(jié)果為:%f \n",result);
    //無(wú)符號(hào)整數(shù)乘法
    char int1[5];
    char int2[5];
    printf("乘法:\n");
    fgets(int1,5,stdin);
    scanf("\n");
    fgets(int2,5,stdin);
    int m = 0,n = 0;
    
    mul(int1, int2,m,n);

    return 0;
}

float addfloat(char float1[], char float2[], int m, int n){char wei1[27],wei2[27],wei_re[27],result[32];;
    int i;
    for(i=0;i<27;i++){wei1[i] = '0';
        wei2[i] = '0';
        wei_re[i] = '0';
    }
    
    int move = calExponent(float1, float2);
        //尾數(shù)加減
        if(move<0){//move = -move;
            int t;
            //27位中第零位不取數(shù)字,用作進(jìn)位
            //第二位為隱藏位,必為‘1’
            wei1[-move+1] = '1';
            wei2[1] = '1';
            //之后的的23位為尾數(shù)的小數(shù)值
            for(t=9;t<32;t++){wei1[t-7-move] = float1[t];
                wei2[t-7] = float2[t];
            }
            unsignedAdd(wei1, wei2, wei_re);
            //右規(guī)
            int count = shiftRight(wei_re);
            //計(jì)算最終值
            for (i = 0; i<32; i++) {if(i<9){result[i] = float2[i];
                }
                else{result[i] = wei_re[i-7];//結(jié)果尾數(shù)的從第2位開(kāi)始 第0位是右規(guī) 第1位是隱藏位
                }
            }
           
            return floatToValue(result,count);
        }
        else{int t;
            //27位中第零位不取數(shù)字,用作進(jìn)位
            //第二位為隱藏位,必為‘1’
            wei2[move+1] = '1';
            wei1[1] = '1';
            //之后的的23位為尾數(shù)的小數(shù)值
            for(t=9;t<32;t++){wei2[t-7+move] = float2[t];
                wei1[t-7] = float1[t];
            }
            unsignedAdd(wei2, wei1, wei_re);
            //右規(guī)
            int count = shiftRight(wei_re);
            //計(jì)算最終值
            for (i = 0; i<32; i++) {if(i<9){result[i] = float1[i];
                }
                else{result[i] = wei_re[i-7];//結(jié)果尾數(shù)的從第2位開(kāi)始 第0位是右規(guī) 第1位是隱藏位
                }
            }
           
            return floatToValue(result,count);
        }
}
//計(jì)算階碼
int calExponent(char float1[], char float2[]){int count=0,i,j,e1=0,e2=0;
    char temp[9];
    temp[0] = '0';
    //對(duì)階 float1的階碼-float2的階碼
    for(i = 8; i >= 1; i--) {if(count){temp[i] = float2[i]=='1' ? '0':'1';
        }
        if(float2[i]!='0'&& count == 0){temp[i] = float2[i];
            count++;
        }
        
    }
        for(j=1;j<9;j++){if(float1[j]=='1') {e1 = e1 + (1<<(8-j));
            }
            if(temp[j]=='1') {e2 = e2 + (1<<(8-j));
            }
        }
        
        return e1+e2-256;
}
//尾數(shù)右移
int shiftRight(char wei_re[]){//右規(guī)
    int count = 0;
    if (wei_re[0] == '1') {int i;
        count++;
        char temp[27];
        for (i=0; i<27; i++) {temp[i] = wei_re[i];
        }
        wei_re[0] = '0';
        for (i = 1; i<27; i++) {wei_re[i] = i==0 ? 0:temp[i-1];
        }
    }
    if(wei_re[26]=='1'){if(wei_re[25]=='1'){int t;
            for (t = 24; t>=0; t++) {if(wei_re[t]!='1'){wei_re[t] = '1';
                    break;
                }
                wei_re[t] = '0';
            }
        }
        else {if(wei_re[24]=='1'){int v;
                for (v = 23; v>=0; v++) {if(wei_re[v]!='1'){wei_re[v] = '1';
                        break;
                    }
                    wei_re[v] = '0';
                }
            }
        }
    }
    return count;
    
}


//無(wú)符號(hào)整數(shù)乘法
unsigned mul(char int1[], char int2[], int m, int n){char result[9];
    for (m = 0; m<9; m++) {result[m] = '0';
    }
    int count = 8;
    char cin = '0';
    for (n = 3; n>0; n--) {if(int2[n]!='0'){int i,j = count;
            for(i = 3 ;i>=0;i--){if(int1[i] == result[j]){char temp = result[j];
                    result[j] = cin!='0' ? '1':'0';
                    cin = temp!='0' ? '1':'0';
                }else{result[j] = cin!='0' ? '0':'1';
                    cin = result[j] !='0' ? '0':'1';
                }
                j--;
            }
        }
        count--;
    }
    printf("結(jié)果為:");
    for (n = 1; n<9; n++) {printf("%c",result[n]);
        if (n==4) {printf(" ");
        }
    }
    return 0;
}


  

測(cè)試舉例:

測(cè)試用例1
測(cè)試用例2
測(cè)試用例3測(cè)試用例4

總結(jié):

秘訣:一定要看書(shū),一定要看書(shū)??!
那什么我C語(yǔ)言基礎(chǔ)比較差,所以這個(gè)整了一周才完成,但是還是很有成就感的,哈哈哈哈哈哈,加油各位!
那啥這只是部分代碼,查看全部代碼 請(qǐng)加qq:1138449792( 主要是為了怕老師說(shuō)抄作業(yè),我可以給你,原理很簡(jiǎn)單的!)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購(gòu),新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站欄目:計(jì)算機(jī)系統(tǒng)基礎(chǔ):實(shí)驗(yàn)3-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.bm7419.com/article22/ihscc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、搜索引擎優(yōu)化微信小程序、App設(shè)計(jì)、云服務(wù)器、服務(wù)器托管

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

手機(jī)網(wǎng)站建設(shè)