float轉IEEE 754 32位浮點數

2022-09-21 12:06:11 字數 1875 閱讀 9810

以參考鏈結的內容為主,加入少量處理

//程式設計環境:

// 作業系統:windows 10

// 程式設計工具:vs2021

// 程式語言:c/c++語言

#include #include //整數轉r進製

//integer:整數 radix:進製 result:結果陣列 num:生成r進製所佔位數

void d1tob(int integer, int radix, int result, int& num)

num = i;//r進製位數

for (j = 0; j < i / 2; j++)//顛倒順序

}//小數轉r進製

//decimal:小數 radix:進製 result:結果陣列 num:生成r進製所佔位數

void d2tob(float decimal, int radix, int result, int& num)

num = i;

}void float_to_ieee754(float number)

for (i = 0; i < 50; i++)

//確定符號位

if (number > 0)

else

//將浮點數分成整數和小數

integer = (int)number;

decimal = number - integer;

//分別將整數和小數轉化成二進位制

int m_n1, m_n2;

d1tob(integer, 2, m, m_n1);

d2tob(decimal, 2, m + m_n1, m_n2);

//規格化,計算階數, 尾數

int pn = 0;//階數

if (integer > 0)//小數點左移

}else//小數點右移

pn = -i - 1;

for (j = 0; j < 23; j++)//去掉左邊無效的0和第乙個的1

}//計算階碼

int p1[8], pn1;

d1tob(pn + 127, 2, p1, pn1);//階數轉二進位制

if (pn1 < 8)//不足8位左邊補0

for (int k = 0; k < pn1; k++)//得出完整p

}else

}//輸出s

printf("%d", s);

//輸出p

for (i = 0; i < 8; i++)

printf(" "); //輸出s

//輸出m

for (i = 0; i < 23; i++)

printf("\n\n");

int array1[32];

memset(array1, 0, 32);

array1[0] = s;

memcpy(array1 + 1, p, 8 * sizeof(int));

memcpy(array1 + 9, m, 22 * sizeof(int));

for (i = 0; i < 32; i++)

printf("\n\n");

int res[8];

int k = 0;

for (i = 0; i < 32; i += 4)

for (i = 0; i < k; i++)

printf("\n\n");

}int main()

return 0;

}

輸出結果

參考:c語言:ieee754十進位制數轉二進位制單精度浮點數

IEEE 754格式標準,float,

float float型別數字在計算機中用4個位元組儲存。遵循ieee 754格式標準 乙個浮點數有2部分組成 底數m和指數e 底數部分 使用二進位制數來表示此浮點數的實際值 指數部分 占用8bit的二進位制數,可表示數值範圍為0 255 但是指數可正可負,所以,ieee規定,此處算出的次方必須減去...

int 轉 float 底層實現

include include include include int main printf x n int float 16777219 printf d n int float 16777219 float f 16777217 printf f n f 輸出 016777217 100000...

float轉int注意事項

最近遇到乙個低階錯誤,哈哈,都不好意思講出來,會犯這種低階錯誤。寫此部落格,記錄我的低階錯誤,以防下次再犯。問題是這樣的,我有一些float型別的資料,我需要將這這些浮點型資料放大到整數,然後轉換成int型別資料,比如float a 5.1 10就得到整數51,然後將浮點型資料51賦值給乙個int型...