小數如何存儲 無論是單精度還是雙精度在存儲中都分為三個部分:
符号位(Sign) : 0代表正,1代表為負指數位(Exponent):用于存儲科學計數法中的指數數據,并且采用移位存儲尾數部分(Mantissa):尾數部分 其中float的存儲方式如下圖所示:
而雙精度的存儲方式為:
float和double類型的數據在内存中的保存形式是一樣的,隻是double表示的範圍更大而已。因此,這裡隻介紹float的表示方法。double同理。
轉換舉例 舉例:22.8125 轉二進制的計算過程:
整數部分:除以2,商繼續除以2,得到0為止,将餘數逆序排列。
得到22的二進制是10110
小數部分:乘以2,取整,小數部分繼續乘以2,取整,得到小數部分0為止,将整數順序排列。
得到0.8125的二進制是0.1101
結果:十進制22.8125等于二進制00010110.1101
程序驗證 假設,我現在有一個數據-12.25。那麼這個數據在計算機内部是如何存儲的呢?首先,将這個浮點數轉換成二進制數。經過轉換,得到的二進制數為:1100.01。接着,将這個二進制數用科學計數法來表示,1.10001 * 2 ^ 3。由于這個數是負數。所以,符号位為1;指數位為127 3 = 130;尾數(小數)為10001。然後,将指數130轉換為二進制數10000010。最後,由于float占4個字節,也就是32位,所以,-12.25在内存中表示為:11000001010001000000000000000000,将這個數用十六進制表示為0xC1440000。那麼,我們的計算結果對不對呢?我們可以用程序來驗證一下。
完全正确
尾言 如果閣下沒有學習位運算不妨關注小編的零基礎視頻教程:
《C語言51課視頻教程合集》
《C語言十大新手練手項目實戰》
《C語言數據結構那點事兒》
通俗易懂,深入淺出,一個視頻隻講一個知識點。視頻不深奧,不需要鑽研,在公交、在地鐵、在廁所都可以觀看,随時随地漲姿勢,人人都可以學習的C語言課程
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!