Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Bits (https://www.delphipraxis.net/37741-bits.html)

Christian Seehase 9. Jan 2005 19:43

Re: Bits
 
Moin Rangarig,

Zitat:

Zitat von Rangarig
Ja das habe ich so getestet läuft ohne Probleme.

das ist dann aber dem Zufall zuzuschreiben ;-)

Zitat:

Zitat von Rangarig
...wie ich eine Konstante gleich Binär angeben kann?

Nur so, wie Nightshade und Gereon das schon geschrieben haben, mit shl.

Delphi-Quellcode:
const
  Acht = 1 shl 3;
einen Präfix für Binärdarstellung wie $ bei Hexadezimal gibt es in Delphi (leider) nicht.

hboy 9. Jan 2005 19:48

Re: Bits
 
geht auch so

Delphi-Quellcode:
containsbits := Boolean(Wert AND Bitmaske);
geht aber nur mit 8 bit glaub ich. Ausprobieren. ansonsten kannst dir ja au

Delphi-Quellcode:
const
  bit00 = $0001;
  bit01 = $0002;
  bit02 = $0004;
  bit03 = $0008;
  bit04 = $0010;
  bit05 = $0020;
  bit06 = $0040;
  bit07 = $0080;
...
  bit31 = $8000;
definieren und prüfen mit

Delphi-Quellcode:
  containsbit := (wert and bit12)<>0;

glkgereon 9. Jan 2005 19:49

Re: Bits
 
aber dann musst du immer in hex umrechnen....

SirThornberry 9. Jan 2005 19:51

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;

glkgereon 9. Jan 2005 19:54

Re: Bits
 
ich versteh da nur bahnhof... :gruebel:

kannst du das event. ma kurz erläutern?

was is TBitIndex?

SirThornberry 9. Jan 2005 20:02

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)

Rangarig 9. Jan 2005 21:21

Re: Bits
 
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. :gruebel:

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.

Rangarig 9. Jan 2005 23:39

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.

Christian Seehase 10. Jan 2005 11:51

Re: Bits
 
Moin René,

Zitat:

Zitat von Rangarig
Ja das habe ich so getestet läuft ohne Probleme.

Dann ist diese Aussage ja doch zutreffend gewesen ;-)

Die Funktion sollte dann aber besser TestBits heissen, denn es werden ja mehrere Bits gleichzeitig geprüft.

Rangarig 10. Jan 2005 12:01

Re: Bits
 
Mahlzeit Christian,

Zitat:

Zitat von Christian Seehase
Die Funktion sollte dann aber besser TestBits heissen, denn es werden ja mehrere Bits gleichzeitig geprüft.

Ja das stimmt demnach sollte der 2. Parameter auch nicht bit sondern mask heißen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:19 Uhr.
Seite 2 von 2     12   

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