亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

好程序員Java學習路線float在內存中的存儲

發布時間:2020-07-12 21:28:38 來源:網絡 閱讀:135 作者:wx5d42865f47214 欄目:編程語言
好程序員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位(最高位)的符號位填充,正數為0,負數為1。
      4. 根據移動的方向確定第31位的值,如果向左移則為1,向右移或者不動為0。
      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為0。
    因為往左移,所以第31位為:1
    因為往左移了3位,3-1=2,所以第30-24位為:0000010
    最后,將小數點后面的數字截斷23位,所以第23-1位為:1000001 10011001 10011001
    最終12.1表示成2進制在內存中保存為:0 1 0000010 1000001 10011001 10011001
向AI問一下細節

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

AI

东乌珠穆沁旗| 长汀县| 安溪县| 衡阳县| 黑山县| 额敏县| 清远市| 肃北| 海门市| 攀枝花市| 长乐市| 靖西县| 峨边| 屯留县| 内江市| 油尖旺区| 仁化县| 大足县| 通江县| 贺兰县| 阿拉善盟| 无锡市| 葫芦岛市| 建阳市| 泽州县| 台南市| 会同县| 长宁区| 保亭| 庆云县| 扎兰屯市| 宣武区| 博兴县| 乐亭县| 兴文县| 定远县| 开江县| 沁水县| 通许县| 遵义市| 吉木萨尔县|