浮點數二進位制表達

2021-07-24 07:45:46 字數 1066 閱讀 3261

浮點數二進位制表達的三個組成部分:

step 1 改寫整數部分 以數值5.2為例。先不考慮指數部分,我們先單純的將十進位制數改寫成二進位制。 整數部分很簡單,5.101.

step 2 改寫小數部分 小數部分我們相當於拆成是2^-1一直到2^-n的和。例如:0.2 = 0.125+0.0625+0.007825+0.003906252^-3+2^-4+2^-7+2^-8....,也即.00110011001100110011

step 3 規格化 現在我們已經有了這麼一串二進位制101.00110011001100110011。然後我們要將它規格化,也叫normalize。其實原理很簡單就是保證小數點前只有乙個bit。於是我們就得到了以下表示:1.0100110011001100110011 * 2^2。到此為止我們已經把改寫工作完成,接下來就是要把bit填充到三個組成部分中去了。

step 4 填充 指數部分(exponent):之前說過需要以127作為偏移量調整。因此2的2次方,指數部分偏移成2+127即129,表示成10000001填入。 整數部分(mantissa):除了簡單的填入外,需要特別解釋的地方是1.010011中的整數部分1在填充時被捨去了。因為規格化後的數值整部部分總是為1。那大家可能有疑問了,省略整數部分後豈不是1.0100110.010011就混淆了麼?其實並不會,如果你仔細看下後者:會發現他並不是乙個規格化的二進位制,可以改寫成1.0011 * 2^-2。所以省略小數點前的乙個bit不會造成任何兩個浮點數的混淆。 具體填充後的結果見下圖:

浮點數的二進位制表示

前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶體中明明是同乙個數,為什麼浮點數...

浮點數的二進位制表示

日期 2010年6月 6日 1.前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶...

浮點數的二進位制表示

1.前幾天,我在讀一本c語言教材,有一道例題 includevoid main void 執行結果如下 num的值為 9 pfloat的值為 0.000000 num的值為 1091567616 pfloat的值為 9.000000 我很驚訝,num和 pfloat在記憶體中明明是同乙個數,為什麼浮...