深圳Java培訓:Java中的float在記憶體中的儲存
深圳 Java 培訓: Java 中的 float 在記憶體中的儲存
最近在講 Java 基礎,講到資料型別的轉換,提到整數型別長位元組型別資料放到短位元組型別資料中時,由於位元組數不夠,會截斷資料,所以需要程式設計師手動強制型別轉換,例如將 int 型的資料放到 byte 型別中。
後來學生提出一個問題,為什麼 float 只有 4 個位元組,而 long 有 8 個位元組,將一個 long 資料放入到一個 float 中時不需要強制轉換,而將 float 放到 long 中卻需要強制轉換呢?
要理解這個問題,首先我們要知道 float 中可以儲存小數,而 long 只能儲存整數,所有 float 的資料放到 long 裡需要強制轉換。
至於為什麼 long 放到 float 裡不需要強制轉換,需要了解 float 儲存資料的機制, float 中儲存資料的時候是以科學計數法的方式計數的,所有能夠儲存的整數大小要超過 long 型別,於是 long 資料放到 float 中是沒有問題的,只是可能會誤差很大而已。
具體來說, float 中儲存一個數字時,是按照這樣做的:
float 有 4 個位元組,即 32 個 bit
32 31 30-24 23-1
符號位 指數符號位 指數 數字
1. 將 10 進位制的小數轉換成 2 進位制的小數。
2. 將小數點移動(左移或右移 n 位)到第一個數字 1 後,得到一個類似 1.01001 … 這樣的一個二進位制小數 m 。
3. 根據小數的正負將第 32 位(最高位)的符號位填充,正數為 ,負數為 1 。
4. 根據移動的方向確定第 31 位的值,如果向左移則為 1 ,向右移或者不動為 。
5. 如果是向左移,將 n-1 後轉換成 2 進位制,並在左邊補零到 7 位長度,填充到 30-24 位的指數位上。如果是不動或向右移,將 n 轉換成 2 進位制,並在左邊補零到 7 位長度,並每一位求反填充到 30-24 位。
6. 將數字 m 去掉整數位和小數點後,截斷 23 位長度填充到 23-1 位。
例如:數字 12.1
轉換成 2 進位制後為: 1100.0001100110011001100110011001100110011001100110011
將數字往左移 3 位為: 1 . 1000001100110011001100110011001100110011001100110011
因為數字 12.1 為正數,所以 float 的第 32 為 。
因為往左移,所以第 31 位為: 1
因為往左移了 3 位, 3-1=2 ,所以第 30-24 位為: 0000010
最後,將小數點後面的數字截斷 23 位,所以第 23-1 位為: 1000001 10011001 10011001
最終 12.1 表示成 2 進位制在記憶體中儲存為: 0 1 0000010 1000001 10011001 10011001
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69942977/viewspace-2652480/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 好程式設計師Java學習路線float在記憶體中的儲存程式設計師Java記憶體
- 深圳軟體測試培訓:java中陣列的操作Java陣列
- 小數在記憶體中是如何儲存的?記憶體
- 【C語言】整型在記憶體中的儲存C語言記憶體
- 記憶體中的資料儲存記憶體
- Java培訓教程:Java中的位移運算子!Java
- 3 python的數值在記憶體中如何儲存Python記憶體
- JAVA物件在JVM中記憶體分配Java物件JVM記憶體
- double型別資料在記憶體中中儲存格式型別記憶體
- JVM中java例項物件在記憶體中的佈局JVMJava物件記憶體
- Swift記憶體賦值探索一: 理解物件在記憶體中的儲存狀態Swift記憶體賦值物件
- C/C++浮點數在記憶體中的儲存方式C++記憶體
- Java併發中的記憶體模型Java記憶體模型
- Java中的記憶體模型詳解Java記憶體模型
- Java記憶體模型FAQ(九)在新的Java記憶體模型中,final欄位是如何工作的Java記憶體模型
- 13 張圖解 Java 中的記憶體模型圖解Java記憶體模型
- Java中的記憶體區域劃分Java記憶體
- 介紹Java中的記憶體洩漏Java記憶體
- 關於java中的記憶體洩漏Java記憶體
- 【轉】java中的記憶體溢位和記憶體洩漏Java記憶體溢位
- 資料在記憶體中儲存的方式:大端模式與小端模式記憶體模式
- 誰能說說java記憶體的永久儲存區域中儲存的內容嗎?Java記憶體
- Java培訓筆記Java筆記
- java 培訓日記Java
- Java應用程式中的記憶體洩漏及記憶體管理Java記憶體
- 什麼是Java記憶體模型(JMM)中的主記憶體和本地記憶體?Java記憶體模型
- 翻譯 | 理解Java中的記憶體洩漏Java記憶體
- Java 執行過程中的記憶體模型Java記憶體模型
- 深入理解Java中的記憶體洩漏Java記憶體
- 如何診斷 Java 中的記憶體洩露Java記憶體洩露
- 如何識別Java中的記憶體洩漏Java記憶體
- 深圳java培訓:構建xml文件--【千鋒】JavaXML
- Java中記憶體中的Heap、Stack與程式執行的關係Java記憶體
- Java中物件並不是都在堆上分配記憶體的。Java物件記憶體
- 使用Java實現在SQLserver中實現圖片的儲存JavaSQLServer
- C語言 | 深度剖析資料在記憶體中的儲存(原碼,反碼,補碼,大小端儲存)C語言記憶體
- java開發培訓中訊息中介軟體的優勢有哪些Java
- java中呼叫儲存過程Java儲存過程