自定义类型,我就不会了,我试下整数. 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;
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;
人家已经回答了你了,前面几个都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;
这样合成你的格式 var N, L30, H02 : LongInt; begin L30 :=999; H02 :=1; N:=L30+(H02 shl 30); ShowMessage(inttostr(N); end; 结果是1999
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;
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;
var
N, L30, H02 : LongInt;
begin
N := $80000001;
L30 := (N shl 2) shr 2;
H02 := N shr 30; ShowMessage(inttostr(H02+inttostr(L30));
end;
var
N, L30, H02 : LongInt;
begin
L30 :=999;
H02 :=1;
N:=L30+(H02 shl 30);
ShowMessage(inttostr(N);
end;
结果是1999