Delphi - база знаний


Как получить доступ к битам переменной и управлять их значением?


Как получить доступ к битам переменной и управлять их значением?




unitBitwise;

interface

function IsBitSet(const val: longint; const TheBit: byte): boolean;
function BitOn(const val: longint; const TheBit: byte): LongInt;
function BitOff(const val: longint; const TheBit: byte): LongInt;
function BitToggle(const val: longint; const TheBit: byte): LongInt;

implementation

function IsBitSet(const val: longint; const TheBit: byte): boolean;
begin
 result := (val and (1 shl TheBit)) <> 0;
end;

function BitOn(const val: longint; const TheBit: byte): LongInt;
begin
 result := val or (1 shl TheBit);
end;

function BitOff(const val: longint; const TheBit: byte): LongInt;
begin
 result := val and ((1 shl TheBit) xor $FFFFFFFF);
end;

function BitToggle(const val: longint; const TheBit: byte): LongInt;
begin
 result := val xor (1 shl TheBit);
end;

end.


SetWord ? слово, которое необходимо установить.
BitNum ? номер бита, который необходимо выставить согласно определениям в секции const (Bit0, Bit1 и др.).
GetBitStat возвращает значение True, если бит установлен и False ? в противном случае.

const
 Bit0 = 1;
 Bit1 = 2;
 Bit2 = 4;
 Bit3 = 8;
 Bit4 = 16;
 Bit5 = 32;
 Bit6 = 64;
 Bit7 = 128;

 Bit8 = 256;
 Bit9 = 512;
 Bit10 = 1024;
 Bit11 = 2048;
 Bit12 = 4096;
 Bit13 = 8192;
 Bit14 = 16384;
 Bit15 = 32768;

procedure SetBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord Or BitNum;        { Устанавливаем бит }
end;

procedure ClearBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord Or BitNum;       { Устанавливаем бит }
 SetWord := SetWord Xor BitNum;      { Переключаем бит }
end;

procedure ToggleBit(SetWord, BitNum: Word);
begin
 SetWord := SetWord Xor BitNum;      { Переключаем бит }
end;

function GetBitStat(SetWord, BitNum: Word): Boolean;
begin
 GetBitStat := SetWord and BitNum = BitNum; { Если бит установлен }
end;

Источник: Книга В. Озерова "Delphi. Советы программистов"


Автор:

StayAtHome

Взято из





Начало  Назад  Вперед



Книжный магазин