主题:请教
zhihaozwj
[专家分:0] 发布于 2007-07-04 08:55:00
帮我解释一下这段代码的意思,谢谢,
istransinf:integer;
inbuf:array of byte;
istransinf:=istransinf and (inbuf[i]=$F),就这段
回复列表 (共2个回复)
沙发
长尾兔 [专家分:3630] 发布于 2007-07-04 19:27:00
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;
板凳
zhihaozwj [专家分:0] 发布于 2007-07-05 08:03:00
谢谢,好像明白了
我来回复