信息學(xué)聯(lián)賽輔導:Fillchar過(guò)程全解(3)
2009-11-12 22:10:14網(wǎng)絡(luò )
15
14
13
12
11
10
9
8
7
6
5
4
3
2
1
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
1
longint類(lèi)型的數據是用補碼表示的有符號數,最高位是符號位,0表示正,1表示負,由于本數是正數,故補碼、反碼及原碼均為00000001000000010000000100000001,其值為(224+216+28+1)10=( 16843009)10;
如果,執行的是fillchar(a,size(a),255),結果又是怎樣的?
由于(255)10=(11111111)2,故填充后,補碼為11111111111111111111111111111111,它是負數,則其反碼為11111111111111111111111111111110,原碼為10000000000000000000000000000001,其值為-1
6.single 每個(gè)元素是4字節量,全部為2.36942782761724E-0038,這是因為,對于每個(gè)元素來(lái)講,用1填充后的結果與longint類(lèi)型的二進(jìn)制碼完全相同,但是, single類(lèi)型對此數據的“解釋”卻完全不同:
A.最高位(第31位)是整個(gè)數的符號位,0為正, 1為負;
B.接著(zhù)的8位(第30位至第23位)是用移碼表示的階碼;
C.后面的23位(第22至第0位)表示尾數;
D.單精度量的值為:±2實(shí)際指數*實(shí)際尾數
、、若階碼=00000000,則實(shí)際指數=-126,實(shí)際尾數=(0.???????????????????????)2,其中的?代表相應位置上的二進(jìn)制碼(0或1);顯然,在?全為0時(shí), 這個(gè)單精度量的值為0;
、、若階碼大于00000000且小于11111111,則實(shí)際指數=階碼-(127)10=階碼-01111111,實(shí)際尾數=(1.???????????????????????)2
、、INF(無(wú)窮大)若階碼=11111111,尾數全0,則已達上界,被作為無(wú)窮大
、、浮點(diǎn)運算錯誤:若階碼=11111111,尾數在(00000000000000000000000, 10000000000000000000000)之間。
、、NAN(非數:Not A Number)若階碼=11111111,尾數在[10000000000000000000000, 11111111111111111111111]之間
下面,我們來(lái)分析二進(jìn)制碼為00000001000000010000000100000001的單精度數(single類(lèi)型)的值是多少。①最高位為0,表示正數;②階碼為00000010,換成10進(jìn)制數為2,則實(shí)際指數=2-127=-125,③尾數為00000010000000100000001,實(shí)際尾數=1. 00000010000000100000001, 換成10進(jìn)制數為1+2-7+2-15+2-23=1.00784313678741455078125, ④此單精度數的值是+2-125*1.00784313678741455078125≈2.36942782761724e-38