Dein Funktion glkgereon:
Zitat:
Delphi-Quellcode:
function TestBit(Value : byte; bit : byte) : boolean;
begin
result:=(Value AND (1 shl bit )) = (1 shl bit);
end;
Aber Schaut diese Funktion nicht das linke Bit neben den in bit angegeben? ODer verstehe ich das nicht.
Das zu prüfende Byte habe ich wie folgt aufgebaut
Delphi-Quellcode:
.
.
.
const
V1 : byte = 1 shl 0;
V2 : byte = 1 shl 1;
V3 : byte = 1 shl 2;
.
.
.
procedure TForm1.Button1Click(Sender: TObject);
begin
V := V xor V1;
Flags_Aendern;
end;
.
.
.
procedure TForm1.Flags_Aendern;
var
b : byte;
begin
CheckBox1.Checked := TestBit(V, V1);
CheckBox4.Checked := TestBit2(V, V1);
CheckBox2.Checked := TestBit(V, V2);
CheckBox5.Checked := TestBit2(V, V2);
CheckBox3.Checked := TestBit(V, V3);
CheckBox6.Checked := TestBit2(V, V3);
end;
.
.
.
function TForm1.TestBit(Value : byte; bit : byte) : boolean;
begin
result := ((Value AND bit) = bit);
end;
Vieleicht habe ich hier aber auch schon einen Fehler gemacht. TestBit2 ist Funktion, wie [quote="glkgereon"] sie gezeigt hat.
Wenn ich die 0. 2er Potenz (sprich das 1.Bit) nachschauen möchte ob es gesetzt ist mache ich das nach Folgender Gleichung auf den Papier:
00000001 -> zu Prüfende Byte (Value)
00000001 AND -> Prüf Byte (bit)
________
00000001 -> Ergebnis (result)
bzw.:
00000000 -> zu Prüfende Byte (Value)
00000001 AND -> Prüf Byte (bit)
________
00000000 -> Ergebnis (result)
(Beispiel mit 8 Bits)
Zumindest habe ich das in der Berufsschule so gelernt.