Телефон: +7 (926) 245-03-63

Управление битами

Следующая статья: Использование собственных курсоров в приложении.

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

Решение 1

unit Bitwise;
 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.

Решение 2

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;