語法意義 |
尚未結案
|
AutoWeb
一般會員 ![]() ![]() 發表:3 回覆:5 積分:1 註冊:2003-03-01 發送簡訊給我 |
procedure TMainForm.btnReadClick(Sender: TObject); var AttrByte :Integer; begin AttrByte:=FileGetAttr(edFileName.Text); if AttrByte AND faReadOnly=faReadOnly then chkReadOnly.Checked:=True else chkReadOnly.Checked:=False; end;我想請教的是:if AttrByte AND faReadOnly=faReadOnly then,這段看來很怪異, faReadOnly當然會等於faReadOnly啊!然後在前頭又加了【AttrByte AND】, 我搞不懂這段的意義,麻煩大大可以解釋給我知道嗎? 謝謝! 發表人 - AutoWeb 於 2004/11/04 09:41:42 |
nancy
一般會員 ![]() ![]() 發表:8 回覆:19 積分:10 註冊:2002-07-11 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
在 SysUtils 單元中的定義 faReadOnly = $00000001;
再來看 bit 運算元 And 的用法是兩個 bit 皆為 1 則結果為 1
兩個 bit 其中有一個 bit 為 0 則結果為 0
因此不管 AttrByte 的 bit1 ~ bit7 為 0 或 1
與 faReadOnly 做 And 的運算結果皆為 0
那來看 AttrByte 的 bit0
若 AttrByte 的 bit0 為 0 的話
與 faReadOnly 做 And 運算那結果會是 0(faReadOnly 的 bit0 值為 1)
即結果是 $00000000
也就不會等於 faReadOnly(faReadOnly 是 $00000001)
若 AttrByte 的 bit0 值為 1 的話
與 faReadOnly 做運算的結果為 $0000001
其值等於 faReadOnly 的值
其實最主要是判斷 AttrByte 的 bit0 的值是否為 1
這也就是程式這麼寫的意義
|
AutoWeb
一般會員 ![]() ![]() 發表:3 回覆:5 積分:1 註冊:2003-03-01 發送簡訊給我 |
|
hagar
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
引言: 也就是說:AttrByte先與faReadOnly做AND運算 再把結果拿來看看是否等於faReadOnly囉??? 那,為啥米要做一次AND運算呢?? 直接 if AttrByte = faReadOnly then 不就可以了嗎??因為 AttrByte := FileGetAttr(edFileName.Text); 取得檔案屬性後 不一定只有 ReadOnly 的屬性啊, 它也許還有隱藏、系統檔等屬性 此時 AttrByte 就不等於 faReadOnly 了. |
AutoWeb
一般會員 ![]() ![]() 發表:3 回覆:5 積分:1 註冊:2003-03-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |