關於浮點數的記憶體結構
浮點數的記憶體結構
根據ieee的標準,浮點數的定義如下
符號位 指數字 小數部分 指數偏移量
單精度浮點數 1 位[31] 8位 [30-23] 23位 [22-00] 127
雙精度浮點數 1 位[63] 11 位[62-52] 52 位[51-00] 1023
我們以單精度浮點數來說明:
符號位,表述浮點數的正或者負
指數實際也有正負的,但是沒有單獨的符號位,而是採用了乙個偏移來表示
在計算機的世界裡,進製都是二進位制的,指數表示的也是2的n次冪
這個資料格式當中的,指數是8位,可表達的範圍是0到255
而對應的實際的指數是-127到+128
這裡特殊說明,-127和+128這兩個資料在ieee當中是保留的用作多種用途的
-127表示的數字是0
128和其他位數組合表示多種意義,最典型的就是nan狀態
小數部分,並不是乙個浮點數的實際的小數
實際的小數在這個小數前面還保留了乙個1
拿浮點數1.0來說
符號位是0, 實際指數是0,對應這裡的指數就是127了,也就是0x7f
而小數部分就是1.0了, 1是暗含的不儲存,實際的小數部分就是0了
因此組合起來的資料就是,0x3f80000
可以用乙個類來表示:
class floattype
}
浮點數記憶體結構
最近比較閒,開始看一些以前的基礎書,回顧一下以前的知識點,這裡分享看 c 反彙編與逆向分析技術揭秘 的一些總結。float型別在向整形型別轉換時,會向零取整,損失精度。浮點數編碼方式 符號 指數 尾數 float 4位元組 32位 1位符號 8位指數 其餘尾數 double 8位元組 64位 一位符...
關於浮點數
oi acm中經常要用到小數來解決問題 概率 計算幾何等 但是小數在計算機中的儲存方式是浮點數而不是我們在作數 算中的數,有精度的限制。以下以gun c 為準,其他語言 或編譯器 也差不了多少。本文競賽向。一 基礎篇 1 一般浮點數使用double,範圍為大概為 10 308 10 308,有效精度...
關於浮點數的比較
include int main return 0 這段 編譯會有警告 warning c4305 initializing truncation from const double to float 也就是說,初始化變數的時候,將double型截斷為float型,有精度損失.同理,則if語句裡面的...