今天看一些計(jì)算機(jī)基礎(chǔ),滿屏的010101感覺雙眼分辨率徹底花掉了,其中浮點(diǎn)數(shù)的二進(jìn)制表達(dá)這里有點(diǎn)模糊記錄一下自己的理解
目前業(yè)界流行的浮點(diǎn)數(shù)標(biāo)準(zhǔn)是IEEE754 , 該標(biāo)準(zhǔn)規(guī)定了4 種浮點(diǎn)數(shù)類型單精度、雙精度、延伸單精度、延伸雙精度。前兩種類型是最常用的,
以單精度小數(shù)為例
例如:0.35 轉(zhuǎn)換成二進(jìn)制的話
0.35*2 = 0.7 取整數(shù)位 0
0.7*2 = 1.4 取整數(shù)位1
0.4*2 = 0.8 取整數(shù)位0
0.8*2 = 1.6 取1
0.6*2 = 1.2 取1
0.2*2 = 0.4 取0
0.4*2 = 0.8 取0
...
最終結(jié)果為01011001100110011001100110011001....
那么我們知道浮點(diǎn)數(shù)在計(jì)算機(jī)中是以科學(xué)計(jì)數(shù)法的形式表達(dá)的
- 符號位
在最高二進(jìn)制位上分配1位表示浮點(diǎn)數(shù)的符號, 0 表示正數(shù), 1 表示負(fù)數(shù)。- 階碼位
在符號位右側(cè)分配8 位用來存儲(chǔ)指數(shù), IEEE754 標(biāo)準(zhǔn)規(guī)定階碼位存儲(chǔ)的是指數(shù)對應(yīng)的移碼,而不是指數(shù)的原碼或補(bǔ)碼。根據(jù)計(jì)算機(jī)組成原理中對移碼的定義可知,移
碼是將一個(gè)真值在數(shù)軸上正向平移一個(gè)偏移量之后得到的。(好吧,其實(shí)我這一點(diǎn)根本就沒懂純粘過來的)。尾數(shù)位
最右側(cè)分配連續(xù)的23 位用來存儲(chǔ)有效數(shù)字, IEEE754 標(biāo)準(zhǔn)規(guī)定尾數(shù)以原碼表
示。正指數(shù)和有效數(shù)字的最大值決定了32 位存儲(chǔ)空間能夠表示浮點(diǎn)數(shù)的十進(jìn)制最
大值。指數(shù)最大值為i27 ;::: 1.7 × 1038 ’而有效數(shù)字部分最大值是二進(jìn)制的1.11···1
(小數(shù)點(diǎn)后23 個(gè)1 ),是個(gè)無限接近于2 的數(shù)字,所以得到最大的十進(jìn)制數(shù)為
2 × 1.7 × 1038 ’再加上最左l 位的符號,最終得到32 位浮點(diǎn)數(shù)最大值為3.4e+38 。
就是這樣啦
科學(xué)計(jì)數(shù)法進(jìn)行規(guī)格化的目的是保證浮點(diǎn)數(shù)表示的唯性。如同十進(jìn)制規(guī)格化的
要求1<= |a|<10 , 二進(jìn)制數(shù)值規(guī)格化后的尾數(shù)形式為l.xyz ,滿足1<= |a|<2。為了節(jié)約存儲(chǔ)空間,將符合規(guī)格化尾數(shù)的首個(gè)1省略,所以尾數(shù)表面上是23 位,卻表示
了24 位二進(jìn)制數(shù)
尾數(shù)的表達(dá)形式
問題就出在這里,我們將0.35轉(zhuǎn)換成了01011001100110011001100110011001但我們?nèi)绾伪磉_(dá)呢?我感覺其實(shí)是很簡單的,思路如下:
正數(shù)的符號位為 0
然后我們將01011001100110011001100110011001放入23位的尾數(shù)位中去,我們又知道有23位但其實(shí)是表達(dá)的24位有效數(shù)字,首位的1是省略的,為了擬合首位1省略,我們的數(shù)字變成了
0
1
01100110011001100110011
可以看到整個(gè)左移了兩位,也就是說數(shù)值變大了,那我們轉(zhuǎn)換的時(shí)候就要把放大的倍數(shù)除掉,那么根據(jù)階碼位的計(jì)算方式x-127=-2得出x=125,那么125的二進(jìn)制表達(dá)是什么呢?
就是01111101
啦
所以拼起來就是
0 01111101 01100110011001100110011