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

二進制轉浮點數工具

發布時間: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的二進制浮點表達。

閱讀全文

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

熱點內容
誅仙62坐騎怎麼升級到63 瀏覽:926
linux以日期查看日誌記錄 瀏覽:446
工業大數據是什麼東西 瀏覽:881
魅族note3怎麼重置網路 瀏覽:510
c語言程序設計模 瀏覽:92
兒童怎麼做可編程機 瀏覽:603
數據計算屬於什麼統計學 瀏覽:921
07word怎麼去掉標記 瀏覽:979
qq緩存的數據是什麼 瀏覽:348
LED主Kv文件多少兆 瀏覽:856
蘋果edge怎麼刪除下載文件 瀏覽:471
sas邏輯回歸代碼 瀏覽:572
用於keil下的stc器件資料庫 瀏覽:400
新聞網站後台如何操作前台 瀏覽:539
在剪映app中怎麼查看視頻尺寸 瀏覽:9
linux文件成分包括 瀏覽:886
文件轉換免費的軟體 瀏覽:644
linuxwpsxlsx 瀏覽:482
小米手機怎麼上移動網路連接失敗怎麼辦 瀏覽:598
win10系統打開java 瀏覽:479

友情鏈接