java中float記憶體儲存原理

2021-07-08 09:18:40 字數 1074 閱讀 9828

規格化表示:

浮點數採用的是ieee standard 754 floating point numbers標準

float占用4個位元組,和int一樣,也是32bit.

第1個bit表示符號,0表示正數,1表示負數.

第2-9個bit表示指數,一共8位(可以表示0-255),這裡的底數是2,為了同時表示正數和負數,這裡要減去127的偏移量.這樣的話範圍就是(-127到128),另外全0和全1作為特殊處理,所以直接表示-126到127.

剩下的23位表示小數部分,這裡23位表示了24位的數字,因為有乙個預設的前導1(只有二進位制才有這個特性).

最後結果是:(-1)^(sign) * 1.f * 2^(exponent)

這裡:sign是符號位(0或1),f是23bit的小數部分,exponent是指數部分,最後表示範圍是(因為正負數是對稱的,這裡只關心正數)

2^(-126) ---> (2-2^(-23)) * 2^127

這個還不是float的取值範圍,因為標準中還規定了非規格化表示法,另外還有一些特殊規定.

非規格化表示:

當指數部分全0而且小數部分不全0時表示的是非規格化的浮點數,因為這裡預設沒有前導1,而是0.

取值為0.f * 2^(-126),表示範圍為:2^(-149) ---> (1-2^(-23)) * 2^(-126). 

其他特殊表示:

1.當指數部分和小數部分全為0時,表示0值,有+0和-0之分(符號位決定),0x00000000表示正0,0x80000000表示負0.

2.指數部分全1,小數部分全0時,表示無窮大,有正無窮和負無窮,0x7f800000表示正無窮,0xff800000表示負無窮.

3.指數部分全1,小數部分不全0時,表示nan.   

結論:可以看出浮點數的取值範圍是:2^(-149) ---> (2-2^(-23))*2^127,也就是float.min_value和float.max_value.

參考資料:

float在記憶體中的儲存

以下內容來自於 1.十進位制轉二進位制 1.1整數 11 2 5 餘 1 5 2 2 餘 1 2 2 1 餘 0 1 2 0 餘 1 0結束 11二進位制表示為 從下往上 1011 1.2小數 0.9 2 1.8 取整數部分 1 0.8 1.8的小數部分 2 1.6 取整數部分 1 0.6 2 1....

float資料在記憶體中的儲存

浮點型變數在計算機記憶體中占用4位元組 byte 即32 bit。遵循ieee 754格式標準。乙個浮點數由2部分組成 底數m 和 指數e。mantissa 2exponent 注意,公式中的mantissa 和 exponent使用二進位制表示 底數部分 使用 進製數來表示此浮點數的實際值。指數部...

float型別在記憶體中的儲存

首先還是看一道題目 include stdafx.h include include using namespace std int tmain int argc,tchar argv 125.5在記憶體中的表示為 125.5轉化為二進位制 1111101.1,變為整數字為1,位1.1111011 ...