信息學聯賽輔導:Fillchar過程全解
2009-11-12 22:10:14網絡
PDF version of this document
Fillchar是Turbo/Borland Pascal的System單元的一個標準過程,它的使用格式是:FillChar(var X; Count: Word; Value),它的功能是,把指定變量X在內存段中所占的低Count個字節賦為相同的值Value, 其中Value是填充的值,只能是Byte、Char或Boolean等單字節類型的值。在Free Pascal中稍加擴展為FillChar(var X; Count: Longint; Value), 功能沒變。
[例1]:Fillchar通常用來給數據賦初值。
var a:array [1..10] of arrtype;
執行fillchar(a,sizeof(a),0);
當arrtype為
1.real(其他實數類型差不多) 使得a中的元素全部成為0.0
2.integer(byte,word,longint,shortint都相同) 全部為0
3.boolean 全部為false
4.char 全部為#0
這里使用了函數sizeof(a),其功能是返回變量a所占的總字節數,如上例返回:
當arrtype為
1.real sizeof(a)的值為60(每個元素占6個字節,10個元素共占60個字節)
single sizeof(a)的值為40(每個元素占4個字節,10個元素共占40個字節)
double sizeof(a)的值為80(每個元素占8個字節,10個元素共占80個字節)
extended sizeof(a)的值為100(每個元素占10個字節,10個元素共占100個字節)
comp sizeof(a)的值為80(每個元素占8個字節,10個元素共占80個字節)
2.integer(word) sizeof(a)的值為20 (每個元素占2個字節,10個元素共占20個字節)
3.byte (shortint) sizeof(a)的值為10 (每個元素占1個字節,10個元素共占10個字節)
4.longint sizeof(a)的值為40 (每個元素占4個字節,10個元素共占40個字節)
5.boolean sizeof(a)的值為10(每個元素占1個字節,10個元素共占10個字節)
6.char sizeof(a)的值為10 (每個元素占1個字節,10個元素共占10個字節)
所以例1的結果就是將數組a的所有元素(全部字節)用0來填充,要注意對不同類型的數據而言,對“0”的“解釋”是截然不同的!對整型或實型量來講,所有字節均為0,則該量也為0;對boolean型量(一個字節)來講,0表示false(非0數表示true),則該量為false;對char型量(一個字節)來講,0表示ASCII碼值為0的字符,則該量為#0。
[例2]:將上例中的fillchar(a,sizeof(a),0)改為 fillchar(a,sizeof(a),1),結果如何呢?
執行fillchar(a,size(a),1);
當arrtype為
1.boolean 全部為true(1是非0值,表示true)
2.char 全部為#1
3.byte,shortint 每個元素是1字節量,全部為1
4.integer,word 每個元素是2字節量,全部為(257)10。這是因為
在一個integer或word 型變量中,它的高、低兩個字節均用1來填充(將10進制數1轉化為二進制數00000001),結果為:
高字節
低字節
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
顯然,得到的量就是(257)10=(0000000100000001)2。
如果,執行的是fillchar(a,size(a),171),結果又是怎樣的?
因為(171)10=(10101011)2,所以,填充后為:
高字節
低字節