double類型數據在內存中中存儲格式


一個值為-1.35的float類型數據,它在存儲器里面怎么存儲,存放的格式是什么

 

應該是ieee standard 754的存儲方式。 
也就是第一位是符號位,然后是8位指數位,然后是23位尾數

IEEE Standard 754 for Binary Floating-Point Arithmetic

http://www.wikilib.com/wiki?title=IEEE_754&variant=zh-sg

 

double雙精度數據類型存儲格式

IEEE 雙精度格式為8字節64位,由三個字段組成:52 位小數 f ; 11 位偏置指數 e ;以及 1 位符號 s。
這些字段連續存儲在兩個 32 位字中


它所表示的值由下表決定,

詳見數值計算指南

如何知道機器double類型數據的存儲方式

從存儲結構和算法上來講,double和float是一樣的,不一樣的地方僅僅是float是32位的,double是64位的,所以double能存儲更 

高的精度。 

任何數據在內存中都是以二進制(0或1)順序存儲的,每一個1或0被稱為1位,而在x86CPU上一個字節是8位。比如一個16位(2 

字節)的short int型變量的值是1000,那么它的二進制表達就是:00000011 11101000。由於Intel CPU的架構原因,它是按字節倒 

序存儲的,那么就因該是這樣:11101000 00000011,這就是定點數1000在內存中的結構。 

目前C/C++編譯器標准都遵照IEEE制定的浮點數表示法來進行float,double運算。這種結構是一種科學計數法,用符號、指數和 

尾數來表示,底數定為2——即把一個浮點數表示為尾數乘以2的指數次方再添上符號。下面是具體的規格: 

````````符號位 階碼 尾數 長度 
float 1 8 23 32 
double 1 11 52 64 
臨時數 1 15 64 80 

由於通常C編譯器默認浮點數是double型的,下面以double為例: 
共計64位,折合8字節。由最高到最低位分別是第63、62、61、……、0位: 
最高位63位是符號位,1表示該數為負,0正; 
62-52位,一共11位是指數位; 
51-0位,一共52位是尾數位。 


按照IEEE浮點數表示法,下面將把double型浮點數38414.4轉換為十六進制代碼。 
把整數部和小數部分開處理:整數部直接化十六進制:960E。小數的處理: 
0.4=0.5*0+0.25*1+0.125*1+0.0625*0+…… 
實際上這永遠算不完!這就是著名的浮點數精度問題。所以直到加上前面的整數部分算夠53位就行了(隱藏位技術:最高位的1 

不寫入內存)。 
如果你夠耐心,手工算到53位那么因該是:38414.4(10)=1001011000001110.0110101010101010101010101010101010101(2) 
科學記數法為:1.001……乘以2的15次方。指數為15! 
於是來看階碼,一共11位,可以表示范圍是-1024 ~ 1023。因為指數可以為負,為了便於計算,規定都先加上1023,在這里, 

15+1023=1038。二進制表示為:100 00001110 
符號位:正—— 0 ! 
合在一起(尾數二進制最高位的1不要): 
01000000 11100010 11000001 11001101 01010101 01010101 01010101 01010101 
按字節倒序存儲的十六進制數就是: 
55 55 55 55 CD C1 E2 40


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM