学习delphi的时间不太长,想试试写一个类自己用。
大概要求是这样,给一个字节(8位),用这个类可以任意取出其中一位。
需要用到shr,shl这些东西。最好能尽量按照oo的思想。
我是个新手,从来没写过类,不知道怎么下手。
另外,对于这个类中的封装把握不太准,所以还请各位高手大发慈悲,教一教我,最好有原码,呵呵~~~~叩谢,扣谢。
大概要求是这样,给一个字节(8位),用这个类可以任意取出其中一位。
需要用到shr,shl这些东西。最好能尽量按照oo的思想。
我是个新手,从来没写过类,不知道怎么下手。
另外,对于这个类中的封装把握不太准,所以还请各位高手大发慈悲,教一教我,最好有原码,呵呵~~~~叩谢,扣谢。
public:
class function GetBit(cData: char; nPos: Integer): Integer; //nPos is from right to left (0-7)
end;function TByte.GetBit(cData: char; nPos: Integer): Integer;
begin
if (nPos >= 8) or (nPos < 0) then
begin
result := 0;
exit;
end;
if (nPos = 0) then
begin
result := cData and 1;
end else
begin
result := cData and nPos*2;
result := result shr nPos;
end;
end;----------------
in application
var
v :Integer;
... v := TByte.GetBit(7, 2);
ShowMessage(IntToStr(v));
...
大侠果然快如疾风,势如闪电。 佩服,佩服。
出去办点事,晚上回来结贴,还请其他大侠不吝赐教。叩谢,叩谢。
此外 result := cData and nPos*2; 逻辑有问题
应该是
result := cData and (1 shl nPos);
另外,delphi里好像有Byte类型的,如果有的话,把参数的char类型改为Byte类型好了
T_Bit = class
private
value:Byte;
public
constructor create( invalue:Byte);reintroduce;overload;
destructor destroy();override; function GetBit(iPos:integer):string;
end;constructor T_Bit.create( invalue:Byte );
begin
inherited Create();
value:=invalue;
end;destructor T_Bit.destroy();
begin
inherited Destroy;
end;function T_Bit.GetBit(iPos:integer):string;
begin
if(iPos>=8) or (iPos<0)then
Result:=''
else
Result:=IntToStr((value shr iPos) And 1);
end;
...........
调用
var
bTemp:T_Bit;
begin
bTemp:=T_Bit.create(127);
Label1.Caption:=bTemp.GetBit(2);
class function GetBit(cData: char; nPos: Integer): Integer; //nPos is from right to left (0-7) //class那里报错 function TByte.GetBit(cData: char; nPos: Integer): Integer;
…………
v := TByte.GetBit(7, 2); //类型似乎不匹配大侠,再次弯腰救救我吧。
走了,晚上回来。
呵呵,我这边页面没有刷新,没有看到您后面的回复。
向您严谨的态度致敬。
我现在真是不想出去了,无奈老板在上。
var
bIn, bOut: Byte;
bIn := bIn and (1 shl n); //n表示位置,在0-7之间
bOut := bIn shr 2;
->>>>
bOut := bIn shr n;