有一個32位元的浮點數,請用10進位表示出來,2進位浮點數的定義為:第一個數字如果是0代表正數,如果是1代表負數,2~9位是2的次方數加上127(為了能表示負數次方),10到32位則是表示原數化成2進位後,以類似科學記號的方式表示時的小數部分。

EX:  01000011110001000111100000000000
第一個0代表這是一個正數
2~9表示指數 10000111  所以135-127=8  代表為2的8次方
10到32位為小數部分10001000111100000000000  等於  0.534912
然後再將0.534912+1=1.534912 再乘以2的8次方
所以答案為 392.938
題目會給你2組測資讀入(t4.txt),請輸出2組測資的答案和相加之後的結果

範例輸入(t4.txt)

01000011110001000111100000000000
10000110101000101011000010000000

範例輸出

字串1 01000011110001000111100000000000 = 392.938
字串2 10000110101000101011000010000000 = -6.1197e-035
392.938

以下是我的程式碼,若要看請反白
#include
#include
using namespace std;

int main()
{
  ifstream fin("T4.txt");
  char ca[40];
  double da,db=0;
  int ia,ib,ic,id=0;
  while(fin>>ca)
  {
    ia=ib=ic=0;
    for(int i=1;i<9;i++)
    {
      ia*=2;
      ia+=ca[i]-'0';
    }
    ia-=127;
    ib=1;
    for(int i=9;i<32;i++)
    {
      ib*=2;
      ic++;
      ib+=ca[i]-'0';
    }
    da=ib;
    for(int i=23;i>ia;i--)da/=2;
    for(int i=23;i     if(ca[0]=='1')da*=-1;
    cout<<"字串"<<++id<<" "<     db+=da;
  }
  cout<<"總和為"<   system("pause");
}
arrow
arrow
    全站熱搜

    和風信使 發表在 痞客邦 留言(0) 人氣()