IEEE制定的浮點數格式

2021-04-13 07:23:34 字數 1763 閱讀 6295

ieee制定的浮點數格式

鑑於有人問到在c語言中float和double型態的儲存格式的問題,所以我就在這邊獻醜一翻,講講我所了解的部份,如有任何錯誤,請各位大哥多多指教...

ieee制定之浮點數格式說明:

float型態:用4個bytes儲存,也就是32 bits.

各個bit的用途如下:

bit   31       23~30                0~22

┌───┬────┬───────┐

│正負號│     指數   │          底數          │

└───┴────┴───────┘

double型態:用8個bytes儲存,也就是64 bits.

各個bit的用途如下:

bit          63         52~62                0~51

┌───┬────┬───────┐

│正負號│    指數    │          底數          │

└───┴────┴───────┘

《說明》正負號(sign): 1為負, 0為正.

指數(exponential):將底數乘上2的指數次方後就是原來的數.

須注意的是: float時,因有8 bits,所以能表示的有2的

256次方,但因為指數應可正可負,所以ieee規定,此處算

出的次方須減去127才是真的指數,所以float的指數可從

-126到128.

同理, double型態有11 bits,算出的值須減去1023,所以

double的指數可從-1022到1024.

底數(mantissa):此部份格式實在難以用文字說明,

請參考下面的例子.

《特例》 0因為無法用任何2的次方表示,所以0的表示法就是

float : 00 00 00 00

double: 00 00 00 00 00 00 00 00

《範例》將17.625換算成float型態.

首先,先將17.625換算成2進製: 10001.101

(什麼??你問我小數是怎麼換的??好吧,就告訴你好了,因為

0.625 = 0.5 + 0.125 , 0.5即1/2 , 0.125即1/8 ,所以

0.625換算成2進製是0.101 ,如果你還沒懂,請你再問別

人.當然,這裡的數字是為了講解方便才用這麼完美的小數,

實際的小數部份,是用無限逼近出來的.)

再來將10001.101向右shift直到小數點前只剩一位(這一位

數當然是1),變成了1.0001101 x 2的4次方(因為向右移了

4位).此時,我們要的底數和指數就出來了:底數部份,因為小

數點前必為1,所以ieee規定只記錄小數點後的就好,所以此

題的底數為0001101 .指數部份實際為4,但在格式中須加上

127 ,固為131 ,即二進位的10000011.

綜合上列各項, 17.625的float儲存格式就是:

0 10000011 00011010000000000000000

轉換成byte : 41 8d 00 00

另外,因為intel cpu是little endian的,所以

41 8d 00 00在記憶體中是按00 00 8d 41的順序放的. (位址

由低到高)

以上的資料,都可以在borland c++的ide環境下,用watch的功能觀察證

明出來.

IEEE 浮點數標準

現在計算機中,浮點數一般採用 ieee 制定的國際標準,這種標準形式如下 數符s 階碼 含階符 尾數 小數點位置 按 ieee 標準,常用的浮點數有三種 符號位s 階碼 尾數 總位數 短實數 單精度 1 8 23 32 長實數 雙精度 1 11 52 64 臨時實數 擴充套件精度 1 15 64 8...

IEEE的浮點數表示

ieee浮點標準用v 1 s m 2 e 由符號,尾數,階碼表示 32位單精度 單精度二進位制小數,使用32位儲存。1 8 23 位長 s exp fraction 31 30 23 22 0 位編號 從右邊開始為0 偏正值 127 64位雙精度 雙精度 二進位制小數,使用64位儲存。1 11 52...

浮點數表示(IEEE 754標準浮點格式)

浮點數的一般表示形式為 乙個十進位制數 可以寫成 n 10e m 乙個二進位制數 可以寫成 n 2e m其中,m稱為浮點數的尾數,是乙個純小數 e是比例因子的指數,稱為浮點數的指數,是乙個整數。在計算機中表示乙個浮點數時,一是要給出尾數m,用小數形式表示 二是要給出指數e,用整數形式表示,常稱為階碼...