AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Frage zu bitweisen Operatoren/Sets

Ein Thema von Benmik · begonnen am 18. Okt 2021 · letzter Beitrag vom 19. Okt 2021
Antwort Antwort
Benmik

Registriert seit: 11. Apr 2009
445 Beiträge
 
Delphi 10.4 Sydney
 
#1

Frage zu bitweisen Operatoren/Sets

  Alt 18. Okt 2021, 14:35
Ich habe eine Routine, in der eine Reihe von "Schaltern" einzeln oder in Kombination gesetzt, entfernt oder ausgelesen wird.
Mein Problem dabei: Das Ganze läuft in einer Schleife, in der alle drei Operationen an verschiedenen Stellen erfolgen können, und ein Schalter soll nur dann gesetzt werden können, wenn er nicht schon vorhanden ist, damit er gegebenenfalls einfach wieder entfernt werden kann. Eigentlich natürlich kein Problem, aber ich möchte gern vermeiden, dass jedesmal, wenn ein Schalter hinzugefügt wird, ein Abfragekonstrukt vorhanden sein muss, also im Grunde ein Eleganz-Problem. Wie macht man sowas am elegantesten?
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Frage zu bitweisen Operatoren/Sets

  Alt 18. Okt 2021, 15:19
Ich verstehe das Problem nicht, ehrlich gesagt. Bei Mengen:
Menge := Menge + [Element]; Fügt das Element nur hinzu, wenn es noch nicht vorhanden war.

Bei Bitmasken:
Mask := Mask or Flag; Fügt das Bit nur hinzu, wenn es noch nicht gesetzt war. Wozu also vorher abfragen?

[edit] Nicht ganz richtig ausgedrückt: egal, ob das Element vorhanden bzw. Flag gesetzt war, das jeweilige Ergebnis bleibt dasselbe, so wäre es richtiger. [/edit]
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
38.731 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Frage zu bitweisen Operatoren/Sets

  Alt 18. Okt 2021, 15:54
Mask := Mask + Flag;
Wer so einen Mist baut, der muß natürlich vorher prüfen,
aber mit OR macht man es eh richtig.

Bei SETs macht das + im Prinzip ein OR.
+ = or
- = and not
* = and
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benmik

Registriert seit: 11. Apr 2009
445 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Frage zu bitweisen Operatoren/Sets

  Alt 18. Okt 2021, 16:12
Bei Mengen:
Fügt das Element nur hinzu, wenn es noch nicht vorhanden war.
Bei Bitmasken:
Fügt das Bit nur hinzu, wenn es noch nicht gesetzt war.
Wozu also vorher abfragen?
Wenn das so ist, dann verstehe ich, dass du das Problem nicht verstehst. Ich hatte von Mengen irgendwie im Kopf, dass ein und dasselbe Element beliebig oft hinzugefügt werden kann. Dann ist das Problem tatsächlich keins, vielen Dank, auch an Himitsu, für das OR.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.287 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Frage zu bitweisen Operatoren/Sets

  Alt 19. Okt 2021, 07:07
Ich hatte von Mengen irgendwie im Kopf, dass ein und dasselbe Element beliebig oft hinzugefügt werden kann.
Das stimmt auch (es gibt keinen Fehler beim Versuch), allerdings ist das Element anschließend trotzdem nur einmal vorhanden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf