C語言深入理解float

2021-07-02 02:02:36 字數 2771 閱讀 2982

先說說32 

位的 float型乙個

正的浮點數 x, 

在計算機中表示為

:x = a  *2

e   

這裡 e 

代表指數

,  a 

代表尾數

,   

在 計算機內部

, 他們都是用二進位制表示的

. 其中

a 用二進位制的科學表示法

表示, 

由於科學表示法第一位總是

1 (0

除外) , 

所以第一位略去不計

.  e 

表示的時候

, 因為要表示出負數

, 所以 

e要加上127 ,  

實際運算的時候要減去

127. 

ieee 規定

, 32 

位 float

型被拆開成以下格式

, 左邊為高位

: 二進位制 0

0000 0000

000 0000 0000 0000 0000 0000 位數

共1位共8

位共23位含義

符號位指數字

尾數字 範圍

0正1負

-127到

+127

0到0x . 7f ff ff

float 的範圍是 

-3.40282 * e

38~ + 3.40282 * e

38一般在人看來是 十進位制的數, 

要轉換成二進位制

. 十進位制轉二進位制

, 大於

1 的部分就是除以

2 取餘

;小於1 

的部分乘

2 取整

.比如 

8.5  

轉換成二進位制就是 

1000.1 , 

處理成這一步

, 還要用科學表示法表示

, 就成了 

1.0001 * 2

3,  注意

: 由於

1.0001 

第乙個1 

要去掉, 

所以成了 

0001

, 3 需要加上 

127 

就成了 

130 , 

二進位制就是 

10000010

。則套用上面話就表示為: 

010000010

0001

0000000

0000 0000

0000

16 進製 就是

:   0x 41 08 00 00 , 

一般來說 

, intel 

系列的 

cpu 

都使用的是 小尾存放

, 就是 高位元組放在後面

, 剛好要掉過來就是

:   0x 00 00 08 41 , 

這樣就完成了一次浮點數的表示

. 注意:

浮點數 

0.0  

在計算機中表示為 

0x 00 00 00 00 .

那麼浮點數的精度是怎麼回事情呢? 

當我們使用二進位制表示 大於

1 的部分的時候

, 沒有問題

, 除以

2,一直下去

, 最後一位肯定不是

1 就是 

0; 那麼小數部分呢

?  舉個例子

, 比如 

0.8 

表示0.8 

* 2 

1.6 - 1 = 0.6           

* 2 

1.2 -1 = 0.2  - 0 

.* 2

0.4 - 0

*2      

0.8 - 0 

這樣就迴圈了 就是說 0.8 

的二進位制 就是

0.11000 11000 ......  

一直迴圈下去

, 而我們計算機如果表示

0.8只能取

0後面的前幾十位

, 這就說明 如果是

0.800....001 (

迴圈超過

100次

) , 

它表示出來的值其實是和 

0.8 

一樣, 

所以我們比較

float

型的數字 用 

a == b 

其實是不嚴謹的

(精度問題

), 一般都是 用 

abs(a - b) < 0.000001 

之類就預設是相等

.  那麼 double

型呢? 

咱們可以照 

float 

型的葫蘆 來畫了

. double 型 只是說 取 

64 位, 比

float

型的位 多一倍

ieee 規定 

double 

型 , 第64

位63-54                                                53-1 

符號位指數字 

( -1024 - 1024)                    

尾數字 

所以 double

型的範圍是

-1.79769 * e

308~ +1.79769 * e

308多用了幾位, 

表示範圍大了很多

, 其實本質跟

float

型一樣.

float浮動深入理解

1.float的原本作用 為了實現文字環繞 2.float的包裹性和破壞性 包裹性 收縮 堅挺 隔絕。bfc block formatting context 塊級格式化上下文 破壞性 會讓父元素高度塌陷 浮動的破壞性只是單純的為了實現文字的環繞效果而已 具有包裹性的其他小夥伴 dispaly in...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...