Набор функций для простой работы с битами и преобразований 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.