比方说有一个32位的自定义类型,前两位数值代表一个意思,后30位是一个意思,请哪位贴一段代码告知如何定义并读写

解决方案 »

  1.   

    自定义类型,我就不会了,我试下整数. var
      N, L30, H02 : LongInt;
    begin
      N   := 565132;
      L30 := N OR $3FFFFFFF;
      H02 := N OR $C0000000;
    end;
    方法二(效率低):var
      N, L30, H02 : LongInt;
    begin
      N   := 565132;
      L30 := (N shl 2) shr 2;
      H02 := (N shr 30) shl 30
    end;
      

  2.   

    const
      hi_mask=$XX...(1100..00 11跟30个0的2进制,然后转换为16进制放到XX位置)
      lo_mask=$YY...(00FF..FF 00跟30个F的2进制,然后转换为16进制放到YY位置)var
      liHi,liLo:integer;
      liSrc:integer;
    begin
      liSRC := 你写的32位数值;
      liHI  := liSRC and Hi_mask;
      liLo  := liSrc and Lo_mask;
      ShowMessage(inttostr(liHI)+' '+inttostr(liLo));
    end;
      

  3.   

    人家已经回答了你了,前面几个都OK,咋不给分?procedure TForm1.Button2Click(Sender: TObject);
    var
      N, L30, H02 : LongInt;
    begin
      N   := $80000001;
      L30 := (N shl 2) shr 2;
      H02 := N shr 30;  ShowMessage(inttostr(H02+inttostr(L30));
    end;
      

  4.   

    这样合成你的格式
    var
      N, L30, H02 : LongInt;
    begin
    L30 :=999;
    H02 :=1;
    N:=L30+(H02 shl 30);
    ShowMessage(inttostr(N);
    end;
    结果是1999