浮點數的二進位制表示

2021-08-21 20:36:50 字數 1417 閱讀 9225

了解

目前c/c++編譯器標準都遵照ieee制定的浮點數表示法來進行float,double運算。這種結構是一種科學計數法,用符號、指數和尾數來表示,底數定為2——即把乙個浮點數表示為尾數乘以2的指數次方再添上符號。下面是具體的規格:

符號位階碼尾數長度

float           1          8        23      32

double          1         11        52      64

例1:

0.5的二進位制形式是0.1

它用浮點數的形式寫出來是如下格式

0 01111110 00000000000000000000000

符號位 階碼 小數字

正數符號位為0,負數符號位為1

階碼是以2為底的指數

小數字表示小數點後面的數字

下面我們來分析一下0.5是如何寫成0 01111110 00000000000000000000000

首先0.5是正數所以符號位為0

再來看階碼部分,0.5的二進位制數是0.1,而0.1是1.0*2^(-1),所以我們總結出來:

要把二進位制數變成(1.f)*2^(exponent)的形式,其中exponent是指數

而由於階碼有正負之分所以階碼=127+exponent;

即階碼=127+(-1)=126 即 01111110

餘下的小數字為二進位制小數點後面的數字,即00000000000000000000000

由以上分析得0.5的浮點數儲存形式為0 01111110 00000000000000000000000

注:如果只有小數部分,那麼需要右移小數點. 比如右移3位才能放到第乙個1的後面, 階碼就是127-3=124.

例2:

-12.5轉為單精度二進位制表示

12.5:

1. 整數部分12,二進位制為1100; 小數部分0.5, 二進位制是.1,先把他們連起來,從第乙個1數起取24位(後面補0):

1100.10000000000000000000

這部分是有效數字。(把小數點前後兩部分連起來再取掉頭前的1,就是尾數)

2. 把小數點移到第乙個1的後面,需要左移3位(1.10010000000000000000000*2^3), 加上偏移量127:127+3=130,二進位制是10000010,這是階碼。

3. -12.5是負數,所以符號位是1。把符號位,階碼和尾數連起來。注意,尾數的第一位總是1,所以規定不存這一位的1,只取後23位:

1 10000010 10010000000000000000000

把這32位按8位一節整理一下,得:

11000001 01001000 00000000 00000000

就是十六進製制的 c1480000.

浮點數的二進位制表示

前幾天,我在讀一本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在記憶體中明明是同乙個數,為什麼浮...