91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中float在內存中的存儲方式是什么

發布時間:2021-12-22 14:17:07 來源:億速云 閱讀:163 作者:iii 欄目:編程語言

本篇內容介紹了“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

“Java中float在內存中的存儲方式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

云南省| 揭西县| 大石桥市| 枣阳市| 深圳市| 杭锦旗| 颍上县| 吉安市| 临猗县| 巨鹿县| 新竹市| 县级市| 株洲市| 高碑店市| 西乡县| 江西省| 博湖县| 绩溪县| 苍梧县| 秀山| 葫芦岛市| 临澧县| 西充县| 岑巩县| 通渭县| 车险| 利津县| 溧水县| 都昌县| 婺源县| 鹿邑县| 杨浦区| 乌拉特前旗| 邵阳市| 忻州市| 宁陕县| 荣昌县| 霞浦县| 阿图什市| 绵竹市| 大洼县|