認識float的指數與尾數

2021-09-26 11:15:23 字數 2000 閱讀 4582

參考:

參考:參考:

參考:參考:

(owed by: 春夜喜雨

學過c/c++語言的我們,通常對於float的理解的話:

float 占用32位,23位尾數字,8位指數字,1位符號位。

對於內部儲存結構的話,我們通過查wikipedia資料可以知道,float作為single單精度,它的儲存結構為: 從高位到低位,依次為:符號位,指數字,尾數字。

指數字float的指數字是無符號的,它的正負區分通過採用乙個偏移值來確定,下表可以查到float單精度的偏移值是127。偏移前表達範圍[0,255],經過偏移後,8位指數字所能表達的範圍是:[-127,128]。

type

sign

exponent

significand field

total

exponent bias

bits precision

number of decimal digits

half15

1016

1511

~3.3

single18

2332

12724

~7.2

double111

5264

1023

53~15.9

但是float是需要表達nan-not a number與inf-infinite的,此時指數字需要來標示,所以全1情況被用掉,另外0特殊表達,指數全0情況也被用掉。 所以去掉乙個最大值,乙個最小值,指數表達的範圍是:[-126,127]

// 指數字全1時表達的infinite

0 11111111 00000000000000000000000 = 7f80 000016 = infinity

1 11111111 00000000000000000000000 = ff80 000016 = −infinity

// 指數字全1時表達的nan

x 11111111 10000000000000000000001 = ffc0 000116 = qnan (on x86 and arm processors)

x 11111111 00000000000000000000001 = ff80 000116 = snan (on x86 and arm processors)

// 指數與精度位全0時表達的+0, -0

0 00000000 00000000000000000000000 = 0000 000016 = 0

1 00000000 00000000000000000000000 = 8000 000016 = −0

尾數字尾數字佔23個bit,它的表達上有乙個特殊點,它被認為是24個bit,第乙個bit取值1,且被隱藏掉:有了這個前提,我們就比較好理解尾數的表達了:

這24個bit,依次表達2^0, 2^-1, 2^-2, 2^-23,隱藏的第一位表達的指就是1,所以拋開指數字和符號位來看, 尾數字表達的範圍是: [1, 2 - 2^-23]

所以:尾數字全0時表達的值是1,全1時表達的最大值2 - 2^-23。

當然了,拋開乙個特殊取值情況:

取值0的情況是一種特殊表達,指數與尾數全為0

所以,1的表達是:

// 指數字取值127-127=0,尾數字取值1,符號位取值0,正數

0 01111111 00000000000000000000000 = 1 * 2^0 = 1

所以,-2的表達是:

// 指數字取值128-127=1,尾數字取值1,符號位取值1,負數

1 10000000 00000000000000000000000 = -1 * 2^1 = 2

符號位符號位就不細說了,0表示正數,1表示負數

結語對於float,用了這麼多年,對它的結構細節卻關注的不多,詳細查一查資料,發現和之前的想當然的理解上差別還是比較大的。

(owed by: 春夜喜雨

CSS 浮動元素(float)的認識

float屬性的值可以是left right或者none。用兩個例子來說明吧 1 混排 causas naturales et antecedentes,idciro etiam nostrarum voluntatum.picture 2 一行兩列 xhtml example source cod...

對於float與流體布局的一點認識

在學完css中浮動的效果後還是有一點蒙,為了更好的認識及使用浮動,現在整理一下思路。浮動,最初是用來實現文字環繞的效果,所以如果將某乙個元素打上浮動標籤,其後面緊跟的乙個元素就會緊跟浮動形成環繞效果。為了實現這種效果,就使得浮動具有兩個特性 包裹與破壞。包裹是指不論元素以前具有什麼屬性,在float...

float與position的使用

源 在用div css做網頁的時候float是最常用的,相對於position比較好控制一點。float分為 float left float right float none 一般情況下只用前兩個。浮動從字面意思就知道他是把該層浮起來,在瀏覽器預設的情況下這個位置上是空的,所以在使用float布局...