学习delphi的时间不太长,想试试写一个类自己用。
大概要求是这样,给一个字节(8位),用这个类可以任意取出其中一位。
需要用到shr,shl这些东西。最好能尽量按照oo的思想。
我是个新手,从来没写过类,不知道怎么下手。
另外,对于这个类中的封装把握不太准,所以还请各位高手大发慈悲,教一教我,最好有原码,呵呵~~~~叩谢,扣谢。

解决方案 »

  1.   

    for exampletype TByte = class
      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));
      ...
      

  2.   

    to:qybao(阿宝) 
       大侠果然快如疾风,势如闪电。 佩服,佩服。
       出去办点事,晚上回来结贴,还请其他大侠不吝赐教。叩谢,叩谢。
      

  3.   

    说明一下:此类用的是类方法,当然你也可以改成实例方法,不过要生成实例才能调用该方法了我没delphi环境,不能测试,你自己看着改吧
    此外 result := cData and nPos*2; 逻辑有问题
    应该是
    result := cData and (1 shl nPos);
    另外,delphi里好像有Byte类型的,如果有的话,把参数的char类型改为Byte类型好了
      

  4.   

    type
        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);
      

  5.   

    to:qybao(阿宝) :  您的代码好像有些问题
      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);  //类型似乎不匹配大侠,再次弯腰救救我吧。
    走了,晚上回来。
      

  6.   

    to:qybao(阿宝) :
      呵呵,我这边页面没有刷新,没有看到您后面的回复。
      向您严谨的态度致敬。
      
    我现在真是不想出去了,无奈老板在上。
      

  7.   

    不用这么复杂吧?
    var
      bIn, bOut: Byte;
      
      bIn := bIn and (1 shl n); //n表示位置,在0-7之间
      bOut := bIn shr 2;
      

  8.   

    bOut := bIn shr 2;
    ->>>>
    bOut := bIn shr n;