Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Zugriff auf einzelne bits einer Variable (https://www.delphipraxis.net/112110-zugriff-auf-einzelne-bits-einer-variable.html)

SirThornberry 15. Apr 2008 11:27

Re: Zugriff auf einzelne bits einer Variable
 
auf bits zugreifen ist was anderes als zu verstehen was bei operationen mit den bits passiert. Wenn du "variable1 + variable2" ausführst wird eine binäre operation ausgeführt und wenn du diese operationen verstehst dann weißt du auch wie man üblicherweise bits manipuliert. Auch bei "if (ausdruck1 or ausdruck2)" wird eine bitoperation ausgeführt wo letztendlich dann die bits anders stehen. Das zu verstehen sollte bei der Arbeit mit Microcontrollern nicht schaden. Denn wenn du das weißt, weißt du auch wo du mit Optimierungen anfangen kannst. Ein Bits setzen geht übrigens mit or.

Variable1: 010000
Variable2: 000010

mit or verknüpft:
Variable3: 010010

Wenn also das eine bit oder das andere gesetzt ist wird es auch beim ergebnis gesetzt.

Delphi-Quellcode:
function setbit(variable: Integer; bitindex: Byte): Integer;
begin
  result := variable or (1 shl bitindex);
end;

nicodex 15. Apr 2008 11:30

Re: Zugriff auf einzelne bits einer Variable
 
Zitat:

Zitat von earlyperl
Mein Gott ist das kompliziert...

Nö, nur anders ;)

Zitat:

Zitat von earlyperl
Ich habe Delphi 6 Pro.

Schade, in aktuellen Delphi-Versionen hätte man den Array-Operator für Bits (so wie im MC-Pascal) nachbilden können.

Zitat:

Zitat von earlyperl
wenn du mir jetzt noch verrätst, wie ich ein bit setzen kann, währe ich dir sehr dankbar!

Include/Exclude für einzelne Bits, oder +/- für mehrere:
Delphi-Quellcode:
var
  Foo: TByteBits;
begin
  Foo := [bBit1, bBit3, bBit5];
  ShowMessage(IntToStr(Byte(Foo)));
  Include(Foo, bBit0);
  Include(Foo, bBit2);
  Exclude(Foo, bBit1);
  Exclude(Foo, bBit3);
  ShowMessage(IntToStr(Byte(Foo)));
  Foo := Foo - [bBit0, bBit2] + [bBit1, bBit3];
  ShowMessage(IntToStr(Byte(Foo)));
end;
ps: man kann auch ".." verwenden um Bit-Bereiche anzugeben: [bBit0..bBit3, bBit7] sind die ersten vier Bits und das höherwertigste Bit ($8F).

SirThornberry 15. Apr 2008 11:34

Re: Zugriff auf einzelne bits einer Variable
 
Zitat:

Include/Exclude für einzelne Bits, oder +/- für mehrere:
:shock: NIEMALS!
denn wenn das bit schon gesetzt ist kommt totaler müll dabei raus.

/Edit: Wie es sich bei sets verhält weiß ich nicht. Aber man sollte sich sowas gar nicht erst angewöhnen bei bitoperationen mit + und minus zu arbeiten.

nicodex 15. Apr 2008 11:39

Re: Zugriff auf einzelne bits einer Variable
 
Zitat:

Zitat von SirThornberry
/Edit: Wie es sich bei sets verhält weiß ich nicht.

Das sind Sets...
...der Compiler macht mit den Bits(-Sets) genau das was man erwartet - nur mit dem Unterschied, dass man den Code noch lesen kann und die Optimierung dem Compiler überlassen bleibt.
(Ich weiß was ich tue - nicht immer, aber oft genug)

SirThornberry 15. Apr 2008 11:50

Re: Zugriff auf einzelne bits einer Variable
 
hmm, komisches verhalten. Eigentlich hatte ich erwartet das bei der Verwendung von "+" also bei einer Addition etwas dazu kommt und nicht das nichts passiert wenn ich etwas addiere.

nicodex 15. Apr 2008 12:05

Re: Zugriff auf einzelne bits einer Variable
 
Zitat:

Zitat von SirThornberry
hmm, komisches verhalten.

Sets haben halt ein eigenes Operatorenverhalten (welches für Sets durchaus sinnvoll ist).
Es gibt noch andere Operatoren für Sets (<=, >=, *, ...) - damit könnte man sich in diesem Beispiel sämtliche binären Operatoren sparen (die man spätestens nach zwei Wochen, trotz Quelltext, nur noch mühsam lesen/verstehen kann).

Muetze1 15. Apr 2008 12:06

Re: Zugriff auf einzelne bits einer Variable
 
* / etc sind entsprechend auch anders definiert für Mengen. Damit bekommt man dann halt die Schnittmenge, etc.


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

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz