對於乙個十進位制的的數字,當我們需要轉化為浮點數時需要按照一定的規則,而ieee754是現在應用比較廣泛的一種標準,下面是關於該標準的一些轉化規則。
浮點數表示的格式:
單精度:總位數(32位)= 符號位(1)+階碼位即指數字(8)+ 尾數字(23);指數偏移量+127
雙精度:總位數(64位)= 符號位(1)+階碼位即指數字(11)+ 尾數字(52);指數偏移量+1023
按照ieee754的標準,被編碼的值分為3種情況:規格化的值,非規格化的值,特殊值
1、規格化的值:當階碼(指數部分)的二進位制值不全為0也不全為1時,所表示的值為規格化的值。
如:131.0625這個數字即為規格化的值,這個數字轉化時我們需要首先將其變化為二進位制小數點前為10000011;小數點後為0001,也就是說(176.0625)10 = (10000011.0001)22、非規格化的值:當階碼部分的二進位製全為0時,所表示的數是非規格化的。//括號後面的數字表示這個數是幾進製
ieee754約定小數點左邊隱含有一位,通常這位數是1 所以接下來我們需要按照科學計數法的思想將其轉化:10000011.0001 = 1.00000110001*2^7
注意:ieee754約定單精度指數偏移量為127,所以我們表示階碼也就是後面的指數的時候需要對7加上127,即後面的階碼為134 =(10000110)2
將上面的全部結合起來可以得到:0(符號位,正數)+10000110(階碼位,共8位)+00000110001000000000000(尾數字,共23位,在上面計算出來的數的基礎上往後補0即可)=01000011000000110001000000000000(把176.0625按照ieee標準轉化後的結果)。
這種時候指數的真值為1-偏移量(單精度-126,雙精度-1022),尾數的值就是二進位制形式對應的小數,不包含隱含的1。
非規格化數一般表示數值0,或者表示非常接近0的數。
規格化表示下,必須使尾數大於等於1,所以無法表示0,注意+0.0與-0.0是不相同的
3、特殊值:**當階碼部分二進位制全部為1時表示特殊的值。
尾數部分全部為0時表示無窮大,符號位為0時,為+∞,符號位為1時表示-∞。當尾數部分不全為0時,為「nan」,即不是乙個數。
IEEE754浮點數精度轉換
最近在利用串列埠讀取溫度採集模組上面的資料時發現返回過來的資料是16進製制的ieee754型別,很顯然這不是我們想要看到的,因此我們必須對他進行解析 因為我用的是j a,所以首先翻了相關文件,發現還真提供的有 float.intbitstofloat hex 當然自己也可以手寫乙個,這時我們就需要了...
浮點數表示(IEEE 754標準浮點格式)
浮點數的一般表示形式為 乙個十進位制數 可以寫成 n 10e m 乙個二進位制數 可以寫成 n 2e m其中,m稱為浮點數的尾數,是乙個純小數 e是比例因子的指數,稱為浮點數的指數,是乙個整數。在計算機中表示乙個浮點數時,一是要給出尾數m,用小數形式表示 二是要給出指數e,用整數形式表示,常稱為階碼...
單精度浮點數(IEEE754)
單精度浮點數佔據4個位元組,4個位元組的分配如下 a 第一位為符號位,0表示正,1表示負 b 第2 9位為階碼,採用移碼表示 c 第10 32位為尾數,採用原碼表示。1 給定32位串,如何轉換成十進位制數 假設記憶體中存在32位串 cd cc 08 41。因為intel cpu採用little en...