提一个语言问题:(39 and 63) = 39 ???(50分)

  • 主题发起人 主题发起人 maple_guo
  • 开始时间 开始时间
M

maple_guo

Unregistered / Unconfirmed
GUEST, unregistred user!
谁能给解释一下下面的几行代码是什么意思?
还有我怎么不能在里面设断点?
代码:
procedure TForm1.Button2Click(Sender: TObject);
begin
  if (1 and 2) = 0 then //true
    showmessage('yes0');

  if (39 and 63) = 39 then //true
    showmessage('yes39');

  if (1 and 2) = 1 then //false
    showmessage('yes1');
end;
 
1 and 2:
二进制中1和2的与
01
10
-----
00
结果肯定是0
其它一样
 
你先把你要 and 的数据转换成二进制就知道了
设断点,不是每个语句都可以的,中间加点东西吧:
procedure TForm1.Button2Click(Sender: TObject);
begin
if (1 and 2) = 0 then //true
showmessage('yes0');
sleep(2);
if (39 and 63) = 39 then //true
showmessage('yes39');
sleep(2);
if (1 and 2) = 1 then //false
showmessage('yes1');
sleep(2);
end;
 
好,你们的解释我明白了,但我不明白为什么要做这样的比较,以下是我在HELP里看到的一段代码,也是我提这个问题的原因:
代码:
The following example uses an edit control, a button, a string grid, and seven check boxes. The check boxes correspond to the seven possible file attributes. When the button is clicked, the path specified in the edit control is searched for files matching the checked file attributes. The names and sizes of the matching files are inserted into the string grid.

procedure TForm1.Button1Click(Sender: TObject);

var
  sr: TSearchRec;
  FileAttrs: Integer;
begin
  StringGrid1.RowCount := 1;
  if CheckBox1.Checked then
    FileAttrs := faReadOnly
  else
    FileAttrs := 0;
  if CheckBox2.Checked then
    FileAttrs := FileAttrs + faHidden;
  if CheckBox3.Checked then
    FileAttrs := FileAttrs + faSysFile;
  if CheckBox4.Checked then
    FileAttrs := FileAttrs + faVolumeID;
  if CheckBox5.Checked then

    FileAttrs := FileAttrs + faDirectory;
  if CheckBox6.Checked then
    FileAttrs := FileAttrs + faArchive;
  if CheckBox7.Checked then

    FileAttrs := FileAttrs + faAnyFile;

  with StringGrid1 do
  begin
    RowCount := 0;

    if FindFirst(Edit1.Text, FileAttrs, sr) = 0 then

    begin
      repeat
        if (sr.Attr and FileAttrs) = sr.Attr then //[b]就是这句,它的作用是什么呢?为什么要这样做?谢谢![/b]
        begin
        RowCount := RowCount + 1;
        Cells[1,RowCount-1] := sr.Name;
        Cells[2,RowCount-1] := IntToStr(sr.Size);
        end;
      until FindNext(sr) <> 0;
      FindClose(sr);
    end;
  end;
end;
 
所查找的文件的属性,必须满足设定的属性,比设定的属性“少”也可以。
如果设定要查找“只读”“系统”文件,那么,如果得到的仅是“只读”
文件也可以。
但我没有测试,根据程序设定的属性去查找,如果要查找“只读系统”文件,
会把仅是只读不是系统文件的文件找出来吗。测试一下就知道程序逻辑是否有
问题。
 
谢谢各位!结贴了。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
631
import
I
后退
顶部