目前大多數高階語言(包括c)都按照ieee-754標準來規定浮點數的儲存格式,ieee754規定,單精度浮點數用4位元組儲存,雙精度浮點數用 8位元組儲存,分為三個部分:符號位、階和尾數。階即指數,尾數即有效小數字數。單精度格式階佔8位,尾數佔24位,符號位1位,雙精度則為11為階,53 位尾數和1位符號位,如下圖所示:
單精度浮點數儲存格式s指數
尾數31 30 23 22 0
雙精度浮點數儲存格式s指數
尾數63 62 52 51 0
細心的人會發現,單雙精度各部分所佔位元組數量比實際儲存格式都了一位,的確是這樣,事實是,尾數部分包括了一位隱藏位,允許只儲存23位就可以表 示24位尾數,預設的1位是規格化浮點數的第一位,當規格化乙個浮點數時,總是調整它使其值大於等於1而小於2,亦即個位總是為1。例如1100b,對其 規格化的結果為1.1乘以2的三次方,但個位1並不儲存在23位尾數部分內,這個1是預設位。
階以移碼的形式儲存。對於單精度浮點數,偏移量為127(7fh),而雙精度的偏移量為1023(3ffh)。儲存浮點數的階碼之前,偏移量要先加到階碼 上。前面例子中,階為2的三次方,在單精度浮點數中,移碼後的結果為127+3即130(82h),雙精度為1026(402h)。
浮點數有兩個例外。數0.0儲存為全零。無限大數的階碼儲存為全1,尾數部分全零。符號位指示正無窮或者負無窮。
下面舉幾個例子:
單精度浮點數
十進位制
規格化符號
移階碼尾數
-12-1.1x23
110000010
1000000 00000000 00000000
0.25
1.0x2-2
001111101
0000000 00000000 00000000
所有位元組在記憶體中的排列順序,intel的cpu按little endian順序,motorola的cpu按big endian順序排列。
單雙精度浮點數
浮點數並不一定等於小數 定點數也並不一定就是整數。所謂浮點數就是小數點在邏輯上是不固定的,而定點數只能表示小數點固定的數值,具用浮點數或定點數表示某哪一種數要看使用者賦予了這個數的意義是什麼。c 中的浮點數有6種,分別是 float 單精度,32位 unsigned float 單精度無符號,32位...
IEEE 浮點數標準
現在計算機中,浮點數一般採用 ieee 制定的國際標準,這種標準形式如下 數符s 階碼 含階符 尾數 小數點位置 按 ieee 標準,常用的浮點數有三種 符號位s 階碼 尾數 總位數 短實數 單精度 1 8 23 32 長實數 雙精度 1 11 52 64 臨時實數 擴充套件精度 1 15 64 8...
單精度浮點數(IEEE754)
單精度浮點數佔據4個位元組,4個位元組的分配如下 a 第一位為符號位,0表示正,1表示負 b 第2 9位為階碼,採用移碼表示 c 第10 32位為尾數,採用原碼表示。1 給定32位串,如何轉換成十進位制數 假設記憶體中存在32位串 cd cc 08 41。因為intel cpu採用little en...