導航:首頁 > 編程大全 > 二進制轉浮點數工具

二進制轉浮點數工具

發布時間:2023-08-18 09:48:05

① 二進制數怎麼轉化為浮點數階碼又是怎麼算出來的

C/C++中, 浮點數,float以及 double 在內存中是怎樣存儲的?
假如,我有32-bit
8bit 8bit 8bit 0 0 0 0 0 1 1 1 1
對於整形int,我們可以很快得出,這是 int i = 15的內存形式。
假設,最低位的bit的位權為-1,最高位為30。 那麼這個就不再表示數字15了,而是
2^-1+2^0+2^1+2^2 = 7.5 了。
當然,上面只是假設,那麼真正的Float 浮點型 在內存中是什麼樣子的呢?
首先需要知道的是 float 在內存中 占 32-bit double型 占 64-bit。
浮點型 在內存中,有3部分構成。
Sign bit
Exponent (指數)
Mantissa(尾數,有效數字)
sign bit
是指浮點數在內存中的 最高位,0 表示 正數,1 表示負數。Sing bit 在浮點數float,32-bit內存中,占 1-bit 。
Exponent
指數,比如 10^5,2^6,這兩個數的 5,6既是exponent。當然,數字在內存中都是以2進制體現的,所以這里的指數,是指以2為底 的指數。比如
0 0 0 0 0 1 1 0
很容易可以知道 Exponent為 6,在表示浮點數的內存中,表示的是 2^6 = 64。
Expoent 在 Float 32-bit的內存中,佔8-bit,在這里把此8-bit視為表示unsigned int 的bit pattern。那麼可以表示的范圍是0~256的整數(指數范圍), 但是指數既可以為正整數,也可以為負整數,這樣以來無法表示-1,-2....這樣的負整數了,所以 IEEE Standard 754 Floating-Point 對此引入了Bias, 偏移量的概念,對於Float型,此偏移量為127. 也就是說 127 這個數字已經被存儲到 Exponent這個部分中了,像之前的那個例子,
0 0 0 0 0 1 1 0
表示的是指數6,但是在float內存結構中,其實表示的是 (6-127)= -121。需要減去已存入的偏移量 127。
假如 2^(1),指數1在float 的內存結構中的 bit pattern是什麼樣子的?
那會不會就是簡單的
0 0 0 0 0 0 0 1
應該是 exponent - 127 = 1;(2^(1)中的指數1是這樣得來的)
exponent = 127+1 = 128.(2^(1)中的指數1,在float內存結構中應該是128的bit pattern才對)
1 0 0 0 0 0 0 0
這只是個例子,幫助理解exponent,不會真的問這樣的問題。。。。
Double型,需要佔用64-bit 內存空間。同樣,也是由 Sign bit,Exponent,Mantissa 3部分構成,不過 Exponent部分,在整個64-bit中 要佔到 11-bit。此外偏移量 為1023。
Mantissa
Mantissa 尾數部分,在float的32-bit的內存空間中,佔到23-bit注意之前說的exponent 指數,最低位是從0開始的,那麼Mantissa,尾數的最高位當然是 -1了。
0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
那麼大家說下,上面的尾數部分在 float 浮點數的內存中,表示多少? 很快可以得到是
2^(-2)+2^(-3) = 0.375。 有錯了,應該是1.375。
大家回想下小學學的 科學記數法,5 = 5.0*10^0 , 0.75 = 7.5*10^(-1)。對吧?
在Float的內存表示中,這23-bit的尾數 僅僅表示 科學記數法 中 非零實數小數點後的精度。 換句話說,Mantissa 包括兩部分,一個是leading bit(科學記數法的非零實數),另一個是fraction bits(即精度),此23-bit僅僅表示的是 fraction bits。而在二進制中,非零實數自然是1了,所以leading bit默認是1了。所以上述表格實際上是表示
引用
1 + 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
這也就是為什麼,在float的內存中,尾數部分可以用23-bit pattern 來表示出24-bit的不同數字了。
在Double型的 64-bit 內存結構中,尾數部分要佔到52-bit。
我們用個表格來表示 在內存中,float是怎樣存儲的。
+/-Sign Exponent 指數 Fraction bit -> .f
s <---------------- 8 ----------------> <-------------------------------------- 23----------------------------->
Unsigned int 2^(-1), 2^(-2), 2^(-3)............
上面這個表格所要 表示的是如下的浮點數
(-1)^s * 1.f * 2^(Exponent-127)
隨手寫了個32-bit pattern,
0 0 0 0 1 0 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
2^8 2^0 2^-23
假如告訴你,這是一個浮點型的內存結構,那麼這個浮點數是多少呢?
這個浮點數可以很快的得到 (-1)^0*1.(2^-2+2^-3)*2^(2^1+2^2+2^4-127)。

② 高分求-1000.5的二進制,轉換成 短浮點數格式 的過程

1 10001000 11110100010000000000000

  1. 將1000.5化成二進制為1111101000.1;

  2. 將1111101000.1的小數點向左移9位使之變為大於1、小於2的小數1.1111010001;

  3. 將1.1111010001中的1.刪除,內並在1111010001的右側用0補齊容23位形成尾數11110100010000000000000;

  4. 恢復時小數點要向右移9位,所以階碼值為+9即1001,用移碼表示為127+9=136即10001000;

  5. 題設是負數,所以符號位取1;

  6. 將符號、階碼、尾數的二進制依次連寫起來生成-1000.5的二進制浮點表達。

閱讀全文

與二進制轉浮點數工具相關的資料

熱點內容
cad自動緩存文件位置 瀏覽:729
請示文件聯系方式寫在哪裡 瀏覽:296
在網路上別人拖欠工資怎麼辦 瀏覽:866
智能感測網路 瀏覽:925
求生之路2最高版本補丁 瀏覽:607
聯想電腦win10系統優化 瀏覽:115
msp430工具 瀏覽:885
c編程思想是哪些 瀏覽:208
網路沒有許可權的訪問許可權 瀏覽:697
圖表上為0的數據不顯示如何設置 瀏覽:968
文件名字重復內容不重復 瀏覽:238
無線路由忘記管理員密碼 瀏覽:628
linux文件系統實現 瀏覽:236
三菱數控編程ne是什麼意思 瀏覽:881
abaqus實例教程cae文件 瀏覽:147
聊天記錄如何保存到資料庫 瀏覽:460
魔獸世界mall是什麼網站 瀏覽:839
華為麥芒怎麼找不到我的文件 瀏覽:811
抖音如何置頂文件 瀏覽:733
win10系統進不去游戲下載不了 瀏覽:367

友情鏈接