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

Previous  Top  Next

    
 

 

 

Code:

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.

 

 

©Drkb::00218


 

SetWord слово, которое необходимо установить.

BitNum номер бита, который необходимо выставить согласно определениям в секции const (Bit0, Bit1 и др.).

GetBitStat возвращает значение True, если бит установлен и False в противном случае.

 

Code:

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. Советы программистов"

 

 

 

©Drkb::00219

Автор: StayAtHome

Взято с Vingrad.ru http://forum.vingrad.ru