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 階碼位即...