HoShiMin
6/28/2015 - 6:08 PM

Набор функций для простой работы с битами и преобразований BIN <-> DEC

Набор функций для простой работы с битами и преобразований BIN <-> DEC

unit BitsUtils;

interface

uses
  SysUtils;

// Преобразования из десятичной в двоичную систему счисления и обратно:
function DecToBin(Value: LongWord): string;
function BinToDec(var BinaryString: string): Integer;

// Битовые операции:
function IsBitSet(Number, BitNumber: LongWord): Boolean; inline;
function SetBit(Number, BitNumber: LongWord): LongWord; inline;
function ResetBit(Number, BitNumber: LongWord): LongWord; inline;
function IsNumberContains(Number, SubNumber: LongWord): Boolean; inline;

implementation

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

function DecToBin(Value: LongWord): string;
var
  Remainder: LongInt;
begin
  while Value >= 2 do
  begin
    Remainder := Value mod 2;
    Value := Value div 2;
    Result := IntToStr(Remainder) + Result;
  end;
  Result := IntToStr(Value) + Result;
end;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

function BinToDec(var BinaryString: string): Integer;
var
  StringLength: Integer;
  Accumulator: Integer;
  I, Temp: Integer;
begin
  StringLength := Length(BinaryString);
  Result := 0;
  Accumulator := 1;
  for I := 0 to StringLength - 1 do
  begin
    Temp := StrToInt(BinaryString[StringLength - I]);
    Result := Result + Temp * Accumulator;
    Accumulator := Accumulator shl 1;
  end;
end;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

function IsBitSet(Number, BitNumber: LongWord): Boolean; inline;
begin
  Result := (Number and (1 shl BitNumber)) <> 0;
end;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

function SetBit(Number, BitNumber: LongWord): LongWord; inline;
begin
  Result := Number or (1 shl BitNumber);
end;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

function ResetBit(Number, BitNumber: LongWord): LongWord; inline;
begin
  Result := Number xor (1 shl BitNumber);
end;

// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

function IsNumberContains(Number, SubNumber: LongWord): Boolean; inline;
begin
  Result := (Number and SubNumber) = SubNumber;
end;

end.