Проверка значения бита
01.01.2007
Проверка - установлен ли определенный бит?
function IsBitSet(Value: cardinal; BitNum : byte): boolean; begin result:=((Value shr BitNum) and 1) = 1 end; ... if IsBitSet(43691,1) then //установлен (равен 1)
Взято из https://forum.sources.ru
function GetBitStat(SetWord, BitNum: Word): Boolean; begin GetBitStat := SetWord and BitNum = BitNum { Если бит установлен } end;
DelphiWorld 6.0
unit BitsForm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; GroupBox1: TGroupBox; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; CheckBox5: TCheckBox; Edit1: TEdit; UpDown1: TUpDown; procedure Edit1Change(Sender: TObject); procedure CheckBoxClick(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.DFM} function IsBitOn (Value: Integer; Bit: Byte): Boolean; begin Result := (Value and (1 shl Bit)) <> 0; end; function TurnBitOn (Value: Integer; Bit: Byte): Integer; begin Result := Value or (1 shl Bit); end; function TurnBitOff (Value: Integer; Bit: Byte): Integer; begin Result := Value and not (1 shl Bit); end; procedure TForm1.Edit1Change(Sender: TObject); var I: Integer; CheckBox: TCheckBox; begin for I := 1 to 5 do begin Checkbox := FindComponent ( 'Checkbox' + IntToStr (I)) as TCheckbox; CheckBox.Checked := IsBitOn (UpDown1.Position, CheckBox.Tag); end; end; procedure TForm1.CheckBoxClick(Sender: TObject); var Val: Integer; begin Val := UpDown1.Position; with Sender as TCheckBox do if Checked then Val := TurnBitOn (Val, Tag) else Val := TurnBitOff (Val, Tag); UpDown1.Position := Val; end; end.
DelphiWorld 6.0
unit BitsForm; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComCtrls, StdCtrls; type TForm1 = class(TForm) Label1: TLabel; GroupBox1: TGroupBox; CheckBox1: TCheckBox; CheckBox2: TCheckBox; CheckBox3: TCheckBox; CheckBox4: TCheckBox; CheckBox5: TCheckBox; Edit1: TEdit; procedure CheckBoxClick(Sender: TObject); procedure FormCreate(Sender: TObject); procedure FormDestroy(Sender: TObject); private MyBits: TBits; procedure UpdateEdit; end; var Form1: TForm1; implementation {$R *.DFM} uses Math; procedure TForm1.UpdateEdit; var I, Total: Integer; begin Total := 0; for I := 0 to 4 do if MyBits.Bits [I] then Total := Total + Round (Power (2, I)); Edit1.Text := IntToStr (Total); end; procedure TForm1.CheckBoxClick(Sender: TObject); begin MyBits.Bits [(Sender as TCheckBox).Tag] := not MyBits.Bits [(Sender as TCheckBox).Tag]; UpdateEdit; end; procedure TForm1.FormCreate(Sender: TObject); begin MyBits := TBits.Create; MyBits.Size := 5; end; procedure TForm1.FormDestroy(Sender: TObject); begin MyBits.Free; end; end.
DelphiWorld 6.0