procedure FunctionDemo();
var
  i: Integer;
  dwLongWord, dwPower: LongWord;
  btBoolean: array[0..15] of Boolean;
begin
  for i := 15 downto 0 do begin
    dwPower := Round(Power(2, i));
    if dwLongWord >= dwPower then begin
      btBoolean[i] := True;
      Dec(dwLongWord, dwPower);
    end
    else
      btBoolean[i] := False;
  end;
end;
这是自己写代码长了之后琢磨出来的.因为1+2不可能大于4.以此类推.但是不清楚delphi有没有更简洁的方法来实现...

解决方案 »

  1.   

    dwLongWord 是作为被分拆的LongWord变量.上面的函数为了简洁.没注意到还没赋值...
      

  2.   

    标准的做法是定义一系列位常量,来判断and的结果的吧
      

  3.   

    你这代码也够麻烦的了,不知道 shl 么?
    另外,dword 是32位的数据,你要16位的话是高16位还是低16位啊?
    delphi 中有集合类型,没必要往别的类型转
      

  4.   

    把LongWord给一个byte数组不就行了
      

  5.   


    type
      //LongWord对应的Boolean数组类型
      TLongWordBooleanArray = array[0..15] of Boolean;function LongWordToBooleanArray(Value: LongWord): TLongWordBooleanArray;
    //LongWord转换为Boolean数组
    var
      i : Integer;
    begin
      for i := 0 to 15 do
      begin
        Result[i] := Value mod 2 <> 0;
        Value := Value shr 1;
      end;
    end;function BooleanArrayToLongWord(Value: TLongWordBooleanArray): LongWord;
    //Boolean数组转换为LongWord
    var
      i : Integer;
    begin
      Result := 0;
      for i := 15 downto 0 do
      begin
        Result := Result shl 1;
        if Value[i] then inc(Result);
      end;
    end;
      

  6.   

    更正一下, LongWord应该是32bit的。type
      TLongWordBooleanArray = array[0..31] of Boolean;function LongWordToBooleanArray(Value: LongWord): TLongWordBooleanArray;
    var
      i : Integer;
    begin
      for i := 0 to 31 do
      begin
        Result[i] := Value mod 2 <> 0;
        Value := Value shr 1;
      end;
    end;function BooleanArrayToLongWord(Value: TLongWordBooleanArray): LongWord;
    var
      i : Integer;
    begin
      Result := 0;
      for i := 31 downto 0 do
      begin
        Result := Result shl 1;
        if Value[i] then inc(Result);
      end;
    end;
      

  7.   

    楼主既然说了DWORD的16个boolean 也就是2个bit作为boolean的依据.
      

  8.   

    我当时也没去仔细算到底是32个Boolean还是16个Boolean.因为不清楚全部加起以后会不会超High(LongWord).只是觉得安全为上.16个暂时够用.呵呵