double型別資料在記憶體中中儲存格式
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 位字中
<iframe id="iframe_0.1399269880822277" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fhiphotos.baidu.com%2F%25CA%25B7%25C4%25FE%2Fpic%2Fitem%2F9d42f51f51d60ab7e1fe0b89.jpg&maxWidth=1200&origin=https://www.cnblogs.com&iframeId=iframe_0.1399269880822277" frameborder="0" scrolling="no" style="border: currentColor; border-image: none; width: 1200px;"></iframe>
它所表示的值由下表決定,
<iframe id="iframe_0.8775323699972194" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fhiphotos.baidu.com%2F%25CA%25B7%25C4%25FE%2Fpic%2Fitem%2Fe9529c25d3ce7b2235a80f89.jpg&maxWidth=1200&origin=https://www.cnblogs.com&iframeId=iframe_0.8775323699972194" frameborder="0" scrolling="no" style="border: currentColor; border-image: none; width: 1200px;"></iframe><iframe id="iframe_0.8830414731384697" src="https://www.cnblogs.com/show-blocking-image.aspx?url=http%3A%2F%2Fhiphotos.baidu.com%2F%25CA%25B7%25C4%25FE%2Fpic%2Fitem%2Fb59d59604557799d8cb10d89.jpg&maxWidth=1200&origin=https://www.cnblogs.com&iframeId=iframe_0.8830414731384697" frameborder="0" scrolling="no" style="border: currentColor; border-image: none; width: 1200px;"></iframe>
詳見數值計算指南
如何知道機器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
相關文章
- 記憶體中的資料儲存記憶體
- JavaScript中的資料型別-儲存差別JavaScript資料型別
- 小數在記憶體中是如何儲存的?記憶體
- 【C語言】整型在記憶體中的儲存C語言記憶體
- Oracle基本資料型別儲存格式淺析——RAW型別Oracle資料型別
- 3 python的數值在記憶體中如何儲存Python記憶體
- 深圳Java培訓:Java中的float在記憶體中的儲存Java記憶體
- C語言 | 深度剖析資料在記憶體中的儲存(原碼,反碼,補碼,大小端儲存)C語言記憶體
- Swift記憶體賦值探索一: 理解物件在記憶體中的儲存狀態Swift記憶體賦值物件
- Redis 記憶體優化神技,小記憶體儲存大資料Redis記憶體優化大資料
- C#引用型別和值型別在堆、棧中的儲存C#型別
- 基本資料型別與引用資料型別,及記憶體分配資料型別記憶體
- 史丹佛程式設計正規化第二課筆記(資料型別在記憶體中的表示)程式設計筆記資料型別記憶體
- 解讀記憶體資料庫的儲存需求RC記憶體資料庫
- js的陣列/物件在記憶體中分別是如何儲存的?JS陣列物件記憶體
- redis-4.資料儲存型別Redis型別
- mysql儲存資料,varchar型別中的資料變成了科學計數法?MySql型別
- 好程式設計師Java學習路線float在記憶體中的儲存程式設計師Java記憶體
- 資料儲存位置記憶體圖及一個題目記憶體
- 怎樣在資料庫中儲存貨幣資料庫
- 浪潮儲存:以全快閃記憶體儲加速數字轉型記憶體
- float double 型別資料極值表示型別
- 自主資料型別:在TVM中啟用自定義資料型別探索資料型別
- [20191219]oracle timestamp資料型別的儲存.txtOracle資料型別
- Android中的資料儲存之檔案儲存Android
- redis-5.資料儲存格式Redis
- C語言細節 儲存類別,連結,記憶體管理C語言記憶體
- openGauss儲存技術(二)——列儲存引擎和記憶體引擎儲存引擎記憶體
- Mybatis讀取和儲存json型別的資料MyBatisJSON型別
- 如何儲存/恢復Java應用程式核心記憶體資料現場?Java記憶體
- JAVA中基本資料型別和引用資料型別Java資料型別
- 在Vue中體驗LeanCloud無後臺輕量級資料儲存服務VueCloud
- 隨筆:MySQL中'' ' ' NULL在Innodb儲存的區別MySqlNull
- 在Hadoop環境中,大資料儲存的技巧有哪些?Hadoop大資料
- Android中的資料儲存之SharedPreferencesAndroid
- iOS開發資料儲存篇—iOS中的幾種資料儲存方式iOS
- [20241009]oracle timestamp with time zone資料型別的儲存.txtOracle資料型別
- Java中的基本資料型別與引用資料型別Java資料型別
- Arm64記憶體模型、記憶體型別、效能與DMA記憶體模型型別