![]() |
Re: Bits
Moin Rangarig,
Zitat:
Zitat:
Delphi-Quellcode:
einen Präfix für Binärdarstellung wie $ bei Hexadezimal gibt es in Delphi (leider) nicht.
const
Acht = 1 shl 3; |
Re: Bits
geht auch so
Delphi-Quellcode:
geht aber nur mit 8 bit glaub ich. Ausprobieren. ansonsten kannst dir ja au
containsbits := Boolean(Wert AND Bitmaske);
Delphi-Quellcode:
definieren und prüfen mit
const
bit00 = $0001; bit01 = $0002; bit02 = $0004; bit03 = $0008; bit04 = $0010; bit05 = $0020; bit06 = $0040; bit07 = $0080; ... bit31 = $8000;
Delphi-Quellcode:
containsbit := (wert and bit12)<>0;
|
Re: Bits
aber dann musst du immer in hex umrechnen....
|
Re: Bits
nicht die schnellste variante aber sie funzt (nehm ich immer)
Delphi-Quellcode:
type
TBitIndex = Byte; function SetBit(const AByte: Int64; const ANewBitStatus: Boolean; const ABitIndex: TBitIndex): Int64; begin if ANewBitStatus then result := AByte or (1 shl ABitIndex) else result := AByte and not(1 shl ABitIndex); end; function GetBit(const AByte: Int64; const ABitIndex: TBitIndex): Boolean; begin result := AByte = SetBit(AByte, True, ABitIndex); end; |
Re: Bits
ich versteh da nur bahnhof... :gruebel:
kannst du das event. ma kurz erläutern? was is TBitIndex? |
Re: Bits
Sorry, hab nicht gesehen das ich da nen extra typen verwendet hab. (ist jetz im editierten Beitrag mit drin). TBitIndex gibt an um das wievielte Bit es sich handelt und ist nix anderes als ein Byte.
Ich habs als TBitindex definiert falls ich den Type später noch ändern will (dann brauch ich nur die Typdeclaration ändern und musst das nicht bei allen Proceduren ändern) |
Re: Bits
Dein Funktion glkgereon:
Zitat:
Das zu prüfende Byte habe ich wie folgt aufgebaut
Delphi-Quellcode:
Vieleicht habe ich hier aber auch schon einen Fehler gemacht. TestBit2 ist Funktion, wie [quote="glkgereon"] sie gezeigt hat.
.
. . 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; 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. |
Re: Bits
sry, mir ist vorhin beim Fernsehen :idea: aufgefallen, das Eure Funktionen nur ein Bit überprüft, ob es auf 1 gesetzt ist bzw. ob nicht. Ich übergebe meiner Funktion aber eine Maske.
|
Re: Bits
Moin René,
Zitat:
Die Funktion sollte dann aber besser TestBits heissen, denn es werden ja mehrere Bits gleichzeitig geprüft. |
Re: Bits
Mahlzeit Christian,
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz