Results 1 to 10 of 10

Thread: How to manipulate specific bits of a variable

Hybrid View

Previous Post Previous Post   Next Post Next Post
  1. #1
    Quote Originally Posted by Darkhog View Post
    //edit: I wrote (but didn't test) function that would check if specific bit is set. You'll need math unit for that one:
    Code:
    function IsBitSet(num:integer;bit:byte):Boolean
    var bitnum:Integer;
    begin
      bitnum:= Trunc(intpower(2,bit);
      Result:= (num and bitnum) = bitnum;
    end;
    Though it should work fine.
    Dan already gave more optimized code for that
    Code:
    function GetBit(const Value, Bit: LongWord): Boolean;
    begin
      Result := Boolean((Value shr Bit) and 1);
    end;
    Both trunc() and intpower() do a massive amount of extra work.

  2. #2
    I guess it should work fine too. But why using longword for bit no.? Byte would do here much better and I don't suppose we'll need to check like 5000th bit of value soon. Therefore longword would just waste memory while byte would be much more memory-efficient here, especially when dealing with embedded systems.

  3. #3
    Byte would be worse actually - more generated code. And you wouldn't save any memory, as it would be most likely passed in a register or pushed as a 4B value on the stack, depending on ABI.

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •