計算機的浮點數表示

2021-07-11 09:51:15 字數 1643 閱讀 2608

假設有乙個浮點數 float fl = 3.14159267 (和圓周率很像啊),它在計算中的是怎樣儲存的呢?

步驟1:轉換為二進位制表示,浮點數分為整數部分和小數部分,對於該浮點數來說,整數部分為3,浮點數部分為0.14159267.

這裡假設fl是4個位元組,32位浮點數表示.

十進位制 二進位制

3【0000,0011】

0.14159267【0010,0100,0011,1111,0110,1010,11】(小數點部分)

先說說32 位的 float型. 乙個浮點數 x, 在計算機中表示為:

x = a * 2^e

這裡a表示尾數,e表示指數,在計算機內部,都是用二進位制來表示的,a使用二進位制的科學法來表示,科學表示法第一位總是1,所以第一位忽略不計,e表示的時候,因為要表示出負數,加上127,實際運算的時候要減去127.

ieee規定,32位float型被拆分所形成的格式如下,左邊為高位:

符號位(0為正,1為負) 指數字 尾數字

最高位32位 第31~24位 第23~1位

【0000,0000】【0000,000 0000,0000 0000,0000】

所以fl的二進位制科學法表示就為:

11.0010,0100,0011,1111,0110,1010,11 * 2^0,進一步表示為:

1.1001,0010,0001,1111,1011,0101,011 * 2^1

那麼,注意1.1001第乙個1要去掉(科學計數法),所以成了1001,指數部分為1,加上127就是128,二進位制就是1000,0000,這樣指數部分就表示完成,符號位因為是正數,所為為0,下面就剩下尾數部分,根據上面的定義:符號位佔1位,指數部分佔8位,尾數部分佔23位.

於是可以表示為:

0 1000,0000 1001,0010,0001,1111,1011,010 (11,這兩個分別是尾數部分24,25位,因為擷取的是前23位)

(注意: 浮點數 0.0 在計算機中表示為 0x 00 00 00 00)

二進位制進製(從高位到低位)表示為:

0100,0000 0100,1001 0000,1111 1101,1010 (取到32位)

十六進製制(從高位到低位)表示為:

40 49 0f da

在小段機器上表示應該為:da of 49 40

但是實際上在vs2010中產看結果卻為:

首位是 db,而不是da,當時計算好長時間,原來這裡有乙個說明(關於擷取位的說明)

在擷取尾數部分第23位數時,第24位為1,那麼就應該進製,所以第23位就變成1,這樣就由 da變為 db,為題出現在進製上,在這裡卡好半天,看文章也看到這個知識點,但是真是自己動手算,這些細節總是會忽略,知易行難,動手吧!

形象化描述

關於移碼

浮點數表示

之前的一些工作當中碰到了很多有關浮點數的問題,比如浮點數的表達範圍 表達精度 浮點數的儲存方式 浮點數的強制型別轉換等等,因此感覺有必要系統了解一下有關浮點數的問題。浮點數是一種公式化的表達方式,用來近似表示實數,並且可以在表達範圍和表示精度之間進行權衡 因此被稱為浮點數 浮點數通常被表示為 n m...

計算機浮點數 float 表示

這篇文章講得比較淺顯易懂,所以轉一下。必須對計算機原理的原碼 反碼 補碼 移碼有個清晰的認識,另外參考一下ieee754,否則也會有不明白的地方。括號內為本人看法或觀點。我想浮點數的實現與編譯器也會有很大關係的。前兩天仔細看了看,覺得研究計算機如果不說說如何表示浮點數就太不厚道了.很多人也寫過,這裡...

計算機浮點數 float 表示

2007 09 09 17 07 3674人閱讀收藏 舉報 先說說32 位的 float型.乙個浮點數 x,在計算機中表示為 x a 2 e 這裡 e 代表指數,a 代表尾數,在 計算機內部,他們都是用二進位制表示的.其中a 用二進位制的科學表示法 表示,由於科學表示法第一位總是1 0除外 所以第一...