C51中float定義的實數(shù)存放形式
C51中的浮點數(shù)采用IEEE-754標準來表示,存儲長度為4個字節(jié),其中包含3個位域:數(shù)符,階碼和尾數(shù)。
(1)1位數(shù)符位:D31
(2)8位階碼:D30----D23(補碼形式存放),其中D30是符號位,與一般表示方法不同,它用1表示正,用0表示負。
(3)23位尾數(shù):D22----D0(原碼形式存放)(注意第一位尾數(shù)不出現(xiàn)在內存中,它總是1,故省略了。)
將一個實數(shù)存數(shù)在C中的方式為:
(1)將這個實數(shù)的絕對值轉化成二進制格式。(整數(shù)部分:除二取余,逆序排列;小數(shù)部分:乘2取整,順序排列。)
(2)將這個二進制格式實數(shù)的小數(shù)點,左移或右移n位,直到整數(shù)部分有且只有一位有效數(shù)字(即整數(shù)部分必須為一個1)。
(3)從小數(shù)點左邊第一個二進制數(shù)字開始,取23位數(shù)字放入D22-----D0位(尾數(shù)部分)。
(4)如果該實數(shù)為整數(shù),則在D31(數(shù)符位)位寫入1,負數(shù)寫入0。
(5)如果n是左移得到的,則說明指數(shù)是正,則在D30位寫入1;如果n是右移得到的或n=0,則D30位放入0。
(6)如果n是左移得到的,則將(n-1)后轉化成二進制,并在左邊補0得到7位二進制數(shù),放入D29----D23中。如果n是右移得到或n=0,則將你轉化成二進制后在左邊補0得到7位二進制數(shù),然后依次各位取反,對應寫入D29-----D23位。
0
1
0
0
0
0
0
1
1
0
1
1
1
1
0
0
0
1
1
1
1
0
1
0
1
1
1
0
0
0
0
1
D31
D30
D29
D28
D27
D26
D25
D24
D23
D22
D21
D20
D19
D18
D17
D16
D15
D14
D13
D12
D11
D10
D9
D8
D7
D6
D5
D4
D3
D2
D1
D0
下面,將23.56化為C語言的float格式存儲,講述浮點數(shù)的存數(shù)方式:
(1)按“整數(shù)部分:除二取余,逆序排列”,“小數(shù)部分:乘2取整,順序排列”將23.56轉化成二進制實數(shù)約為:10111.1000,1111,0101,1100,001(因為要左移4位,所以小數(shù)點后保留23-4位數(shù)字即可)(若為負數(shù),則此步驟位求其絕對值的二進制實數(shù)表達形式)
(2)將小數(shù)點左移4位(n=4),得到1.0111,1000,1111,0101,1100,001
(3)這時已經(jīng)有24位位數(shù)了,將最高位的1舍去,將剩下的23位小數(shù)部分數(shù)字對應寫入尾數(shù)的D22---D0位。
(4)由于23.56是正數(shù),所以在D31(數(shù)符位)寫入0。
(5)因為我們把小數(shù)點左移,因此在D30位放入1(指數(shù)為正數(shù))。
(6)因為我們把小數(shù)點左移n=4位,所以(n-1)=3,化為二進制,補足7位為:000,0011。寫入D29---D23位。