type
TX = array[0..2,0..7] of Boolean;
Var
DX:array[0..4] of SmallInt;
i,k:integer;
X:TX;
begin
fx.ActPortNumber:=1;
fx.Open;
FX.ReadDeviceBlock2('X0',3,DX[0]);
for i:=0 to 2 do
for k:= 0 to 15 do
begin
if DX[i] and Round(Power(2,K))=0 then
X[i, k Mod 8]:= False
else
X[i, k Mod 8]:= True;
end;
D[i]怎么从 3开始循环的
解决方案 »
- 用Delphi6自带的InstallShield Express对数据库程序进行打包
- 怎么防止DBGrid输入重复的数据?高手们请进
- 急呀,在线求救,BDE不能连接Oracle数据库的问题!!!
- 如何对Edit循环赋值?
- 紧急咨询,同样的程序,在WINDOWS 98、2000下出错,在xp下好
- 是不是用计算字段就可以解决了呢
- sql语句在VB里运行出错,关于引号的用法,怎么写
- 请把下面一段c程序改成delphi版本的,谢谢.
- johnsonrao(johnson),快来领分(30)
- 我用DELPHI做一个MDI窗体,为何子窗体的大小总是不能由程序控制呢
- 想从Delphi7过渡到高版本,哪个版本最适合平滑过渡?
- pascal 控制台程序 按回车后程序自动关闭了
for k:= 0 to 15 do
begin
if DX[i] and Round(Power(2,K))=0 then
X[i, k Mod 8]:= False
else
X[i, k Mod 8]:= True;
end;就是说,I:integer, 按理来说第一次循环的时候应该是 DX[i]=DX[0],然后DX[1],DX[2]这样的顺序循环执行下去,但是调试的时候,居然发现,第一次循环的时候DX[i],I居然等于3,好像把他当位读了
诡异的事情!
if DX[i] and Round(Power(2,K))=0 then
X[i, k Mod 8]:= False
else
X[i, k Mod 8]:= True;写成
X[i, k Mod 8]:= DX[i] and Round(Power(2,K))<>0;
你还是理解不了么?那k mod 8你怎么理解的?算数表达式最后变成一个数字你能理解,而逻辑表达式最后变成一个逻辑值你怎么就理解不了呢?
这样写,X的2维数组没有赋到值!
for k:= 0 to 15 do
begin
if DX[i] and Round(Power(2,K))=0 then
上面那个Power(2,K)不对,应该为Power(2,K mod 8),
但如果改成k mod 8,那你k循环16次就没意义,直接循环8次即可
X[i, k Mod 8]:= False
else
X[i, k Mod 8]:= True;
end;下面是修改的代码for i:=0 to 2 do
for k:= 0 to 7 do
X[i, k]:= DX[i] and Round(Power(2,K))<>0;
for k:= 0 to 7 do
X[i, k]:= DX[i] and Round(Power(2,K))<>0;
X[0,0-7]取到值了,但是X[1,0-7],X[2,0-7],好像没有取到值
D[1]等于 X[1,0-7]
D[2]等于 X[2,0-7]用了
for i:=0 to 2 do
for k:= 0 to 7 do
X[i, k]:= DX[i] and Round(Power(2,K))<>0;X[0,0-7] 取到值了(确定是正确的),但是D[1],[2]好像没有取到!
DX[0]:=1 X[0,..] 的倒排列是 00000001b=1
DX[1]:=2 X[1,..] 的倒排列是 00000010b=2
DX[2]:=3 X[2,..] 的倒排列是 00000011b=3