回 帖 发 新 帖 刷新版面

主题:请教

帮我解释一下这段代码的意思,谢谢,
istransinf:integer;
inbuf:array of byte;
istransinf:=istransinf and (inbuf[i]=$F),就这段

回复列表 (共2个回复)

沙发

var
  IsTransinf : integer; //IsTransinf是一个整型
  InBuf : array of byte; //InBuf是一个字节类型的动态数组, InBuf[0]即它的第1个元素
begin
  //....
  IsTransinf := IsTransinf and (InBuf[i]=$F);
  //下面解释一下上面这句话的意思:

    InBuf[i]=$F 是一个判断,当这个判断成立(即InBuf[i]的值是$F即15)时,这个式子的值是True,也就是1;当判断不成立时,这个式子的值是False也就是0。
    然后,IsTransinf与上面这个值进行“按位与”的运算,结果再赋给IsTransinf。
    所以说,IsTransinf最终的值将是0或1,只有当原IsTransinf值为奇数,并且InBuf[i]值为15时,IsTransinf值才为1,否则为0。

    !!!!!其实,(InBuf[i]=$F)应该加一个加制类型转换:
    IsTransinf := IsTransinf and integer(InBuf[i]=$F);
                                //~~~~~~~

演示如下:

var
  IsTransinf : integer;
  InBuf : array[0..1] of byte;
begin
  IsTransinf := 5; // 5 即二进制的 0000 0101
  InBuf[0] := 15;
  IsTransinf := IsTransinf and integer(InBuf[0]=$F);
  // 0000 0101 和 0000 0001 按位与后, 结果为 0000 0001
  Showmessage(InttoStr(IsTransinf)); // 1

  IsTransinf := 5;
  InBuf[0] := 12;
  IsTransinf := IsTransinf and integer(InBuf[0]=$F);
  // 0000 0101 和 0000 0000 按位与后, 结果为 0000 0000
  Showmessage(InttoStr(IsTransinf)); // 0

  IsTransinf := 4; // 4 即二进制的 0000 0100
  InBuf[0] := 15;
  IsTransinf := IsTransinf and integer(InBuf[0]=$F);
  // 0000 0100 和 0000 0001 按位与后, 结果为 0000 0000
  Showmessage(InttoStr(IsTransinf)); // 0
end;

板凳

谢谢,好像明白了

我来回复

您尚未登录,请登录后再回复。点此登录或注册