IEEE 754格式標準,float,

2022-01-21 18:33:19 字數 2287 閱讀 6922

float

float型別數字在計算機中用4個位元組儲存。遵循ieee-754格式標準:

乙個浮點數有2部分組成:底數m和指數e

底數部分 使用二進位制數來表示此浮點數的實際值

指數部分 占用8bit的二進位制數,可表示數值範圍為0-255

但是指數可正可負,所以,ieee規定,此處算出的次方必須減去127才是真正的指數。

所以,float型別的指數可從-126到128

底數部分實際是占用24bit的乙個值,但是最高位始終為1,所以,最高位省去不儲存,在儲存中佔23bit

科學計數法。

格式:seee eeee emmm mmmm mmmm mmmm mmmm mmmm

s表示浮點數正負

e指數加上127後的值得二進位制資料

m底數舉例:

17.625在記憶體中的儲存

首先要把17.625換算成二進位制:10001.101

整數部分,除以2,直到商為0,餘數反轉。

小數部分,乘以2,直到乘位0,進製順序取。

在將10001.101右移,直到小數點前只剩1位:

1.0001101 * 2^4 因為右移動了四位

這個時候,我們的底數和指數就出來了

底數:因為小數點前必為1,所以ieee規定只記錄小數點後的就好。所以,此處的底數為:0001101

指數:實際為4,必須加上127(轉出的時候,減去127),所以為131。也就是10000011

符號部分是整數,所以是0

綜上所述,17.625在記憶體中的儲存格式是:

01000001 10001101 00000000 00000000

我們先來看看下面這個程式

從**中可以得知,程式裡面定義了乙個float型的容器,容器裡面裝了乙個資料0.25

↓↓↓↓↓↓↓而這個資料在記憶體裡面是醬紫儲存的↓↓↓↓↓↓↓

從上可以看到,資料0.25在記憶體裡面被儲存為了3e800000h

為什麼資料會變成一連串看不懂的數字呢?

這裡就涉及到了浮點型的資料在記憶體中儲存的方式

經過一番垂死掙扎之後,我了解到:

浮點數型別在儲存方式上都是遵從ieee規範的

具體儲存浮點數的步驟,在網上有各種各樣不同的見解,方式各異

所以,我就來為大家添亂啦,再獻上我的理解~~

首先我們需要了解的是:1.float是32位的,也就是dword的,double是64位的。

2.在記憶體中,浮點數是分為三個部分儲存的,分別是符號位、指數部分和尾數部分。

知道以上兩點之後,我們就可以知道浮點數在記憶體中的儲存方式

↑↑↑↑↑↑↑↑↑↑這個是float型在記憶體的儲存方式↑↑↑↑↑↑↑↑↑↑

↑↑↑↑↑↑↑↑↑↑這個是double型在記憶體的儲存方式↑↑↑↑↑↑↑↑↑↑

所以,可以得知,8.25的二進位制數就是1000.01,由此可知,0.25的二進位制數就是0.01

由此可知:二進位制數1000.01左移小數點三位之後可以變成1.00001

二進位制數0.01右移小數點兩位之後可以變成1.0

由於float型的尾數部分有24位,轉換成16進製制之後就是6位(24/4=6),所以float型只能精確到小數字的後6位.

ps:為什麼會有精確位數?你可以算算8.4這個資料在記憶體中是怎麼儲存的,就知道啦

IEEE754標準,從源頭講起

在學習計組的過程中,經常忘記一些細節。比如 符號位 規格化 等等概念。這幾天發覺,如果能夠從這些東西的背景去考慮問題的話,可能就不會有這麼多的遺忘了。浮點數的規格化浮點數的階碼一般使用移碼來表示,並不牽扯到規格化。規格化特指尾數的規格化。尾數可能是補碼或者原碼。當尾數m是原碼,只要滿足1 2 m 1...

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

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

IEEE754標準浮點數的轉換

對於乙個十進位制的的數字,當我們需要轉化為浮點數時需要按照一定的規則,而ieee754是現在應用比較廣泛的一種標準,下面是關於該標準的一些轉化規則。浮點數表示的格式 單精度 總位數 32位 符號位 1 階碼位即指數字 8 尾數字 23 指數偏移量 127 雙精度 總位數 64位 符號位 1 階碼位即...