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

溫馨提示×

溫馨提示×

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

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

好程序員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

买车| 周至县| 方山县| 贵德县| 遂昌县| 顺义区| 固阳县| 普安县| 桑日县| 积石山| 汉川市| 汉阴县| 定陶县| 石渠县| 奉化市| 清徐县| 云梦县| 兴业县| 博乐市| 石狮市| 任丘市| 商河县| 岑溪市| 台江县| 永顺县| 丘北县| 海南省| 襄樊市| 望奎县| 额济纳旗| 乌鲁木齐县| 顺义区| 富平县| 昌吉市| 靖西县| 文安县| 丽江市| 阿尔山市| 略阳县| 大庆市| 留坝县|