單精度浮點數 二進位制的轉換 C 實現

2021-07-24 06:01:04 字數 1985 閱讀 4711

//將單精度浮點數,轉換為十進位制

string mysystem::floattobinarybymemory(float num)

//翻轉字串

int i = 0;

int j = intstr.size() - 1;

while (i < j)

string estr(8, '0'); //指數域

string mstr(""); //小數域

//分解小數部分----由於小部分,可能會出現分解不完全的情況,並且float中僅有23位,所以僅僅迴圈23次------但是對於僅有小數的部分,還要截斷一部分,所以需要補充

for (int i = 1; i < 24+23; ++i)

float temp = pow(2, -i);

if (frac >= temp)

else

}if (num>=1.0)

//那麼小數域為;

mstr = intstr.substr(1) + fracstr;

} else

}unsigned char offset = index?(-index + 127):0;//如果小數部分沒有1的話,那麼就是x.0

int temp = 7;

//指數域

while (offset)

//那麼小數域為;

mstr = fracstr.substr(index);

} //對字元進行填充

if (mstr.size() > 23)

else

}} return sign + estr + mstr;

}

//將二進位制的資料,轉換為float浮點數

float mysystem::binarytofloat(string str)

// (-1) s表示符號位,當s = 0,v為正數;當s = 1,v為負數。

// (2)m表示有效數字,大於等於1,小於2。

// (3)2^e表示指數字。

//對於單精度 符號位 1 指數為8 有效數字 23

// (1)e不全為0或不全為1。這時,浮點數就採用上面的規則表示,即指數e的計算值減去127(或1023),得到真實值,再將有效數字m前加上第一位的1。

// (2)e全為0。這時,浮點數的指數e等於1 - 127(或者1 - 1023),有效數字m不再加上第一位的1,而是還原為0.******的小數。這樣做是為了表示±0,以及接近於0的很小的數字。

// (3)e全為1。這時,如果有效數字m全為0,表示±無窮大(正負取決於符號位s);如果有效數字m不全為0,表示這個數不是乙個數(nan)。

int sign = (str[0] == '0') ? 1 : -1;

//分解有效數數字,因為,對於e來說比較複雜,所以我們最後在分解

float frac = 0.0;

for (int i = 9; i < str.size();++i)

//分解指數字

//假如全為0的情況

bool mark = true;

for (int i = 1; i < 9;++i) }

if (mark)

//假如全為1的情況

mark = true;

for (int i = 1; i < 9;++i) }

if (mark)

else //如果符號為0的話,返回正無窮

}else //不然的話,返回nan 不是乙個數字

}//最後一種情況,指數不全為0或者1

unsigned char p = 0;

for (int i = 8,index=0; i >= 1;--i,++index)

float e = pow(2, p - 127);

return sign*e*(1 + frac);

}

浮點數的二進位制

1.前幾天,我在讀一本c語言教材,有一道例題 include void main void 在我的編譯器下 編譯是會發生錯誤的。錯誤 cannot convert from int to float win7 vc6.0 sp6 執行結果如下 num的值為 9 pfloat的值為 0.000000 ...

浮點數轉化二進位制

乙個int型別表示的整數值是 2 31 2 31 1 32位二進位制表示 1111111111111111 11111111 11111111 011111111 11111111 11111111 1111111 類似整數聯想到浮點數是怎麼表示的呢?最初正常人可能為這樣想的 但是這樣好像表示的數也...

十進位制浮點數轉換為二進位制

浮點數儲存 浮點數在計算機中儲存也是以二進位制的形式,遵循ieee二進位制算數標準 格式為 float 符號位 首位 指數字 8位 尾數 23位 double 符號位 首位 指數字 11位 尾數 52位 十進位制浮點數轉換為二進位制 方法 整數部分 除以2,取出餘數,商繼續除以2,直到得到0為止,將...