AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Warum "OR" und nicht "AND" ?

Ein Thema von Pseudemys Nelsoni · begonnen am 10. Jul 2004 · letzter Beitrag vom 20. Okt 2004
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    
Benutzerbild von Pseudemys Nelsoni
Pseudemys Nelsoni

Registriert seit: 24. Dez 2002
Ort: Hamburg-Harburg
3.551 Beiträge
 
#1

Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 13:00
hoi,

exakt dieses Thema hatte ich schonmal erstellt, kann es aber nichtmehr finden...

Also meine Frage nochmal, wieso verbindet man z.b 2 konstanten (meistens bei api funktionen) mit "OR" ? das müsste doch "AND"(und!) heissen oder nicht?
Mario
MSN: cyanide@ccode.de
  Mit Zitat antworten Zitat
Benutzerbild von Christian S.
Christian S.

Registriert seit: 19. Apr 2003
Ort: Düsseldorf
835 Beiträge
 
#2

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 13:04
Hallo!

Die Verknüpfung der Konstanten ist ja nichts anderes als das bitweise verknüpfen zweier Integers. Nehmen wir an, Du hast die Konstanten CO_A und CO_B. In Binärdarstellung:

CO_A = 01
CO_B = 10

Wenn Du die nun bitweise mit AND verknüpfen würdest, bekämst Du ja 00 raus. Nur bei OR bekommst Du 11 raus, und das ist es, was Du haben willst, weil ja beides drin vorkommen soll!

MfG
Peter
Christian S.
Admin in der Entwickler-Ecke
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#3

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 17:31
Hi,
wie Peter schon gesagt hat, hat das mit der Bit-Arithmetik zu tun.
Es kommt noch hinzu, dass du dann auch über prüfen kannst:
Delphi-Quellcode:
iFlag = C_BASE or C_FLAG1;

// ...

if (iFlag and C_FLAG1) then begin
  // ...
end else if (iFlag and C_FLAG2) then begin
  // ...
end;
Chris
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#4

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 17:35
Du musst nicht OR verwenden, du kannst sie ganz einfach addieren:
Diese Konstanten sind ja immer 2^n. Wenn du nun z.B. 10 und 01 OR-verbindest, erhälst du 11. Das ist eben das gleiche wie 10 + 01. Genau diese Eigenschaft ist der Grund, wieso 2er-Potenzen für diese Zwecke verwendet werden.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
BKempf

Registriert seit: 1. Jun 2004
103 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 17:44
Waere mal lustig, das ganze so zurechtzubiegen, dass es mit "and" passt:
(Der Verstaendlichkeit halber: Zahlen sind binaer notiert)
Code:
const
  OptionA=1110;
  OptionB=1101;

begin
  // OptionC <=> OptionA und OptionB sind gewuenscht
  OptionC:=OptionA and OptionB;  // 1110 and 1101 = 1100
end;
Man muesste also bei der Auswertung die Nullen als "true" (=gesetzte Option) betrachten und Einsen als "false":

Code:
OptionAGewuenscht:=not(OptionC or OptionA) >0
The problem with troubleshooting is that sometimes the trouble shoots back.
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#6

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 17:48
Zitat von alcaeus:
Du musst nicht OR verwenden, du kannst sie ganz einfach addieren:
Diese Konstanten sind ja immer 2^n.
Das sind sie nicht immer. Zudem gibt es dann Probleme mit Alias-Konstanten...

Keine Gute Idee:
Delphi-Quellcode:
const
  Foo = 1;
  Bar = 2;
  All = Foo or Bar;

...
  Bug := All + Foo;
Die sicherste Variante:
Delphi-Quellcode:
NoBug := All or Foo;
...
if (NoBug and Foo) = Foo then
Alles andere sind Optimierungen für die Falle, dass die Konstanten a) keine gemeinesamen Bits und b) jeweils nur ein Bit gesetzt haben (und man weiss was man tut ).


Gruss Nico

ps: 'or' und 'and' gehören zu einer andere Algebra und haben nichts mit + und - zu tun.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.033 Beiträge
 
Delphi 12 Athens
 
#7

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 17:52
Zitat von alcaeus:
Du musst nicht OR verwenden, du kannst sie ganz einfach addieren:
Diese Konstanten sind ja immer 2^n. Wenn du nun z.B. 10 und 01 OR-verbindest, erhälst du 11. Das ist eben das gleiche wie 10 + 01. Genau diese Eigenschaft ist der Grund, wieso 2er-Potenzen für diese Zwecke verwendet werden.

Greetz
alcaeus
also bei 01 und 10 stimmt das ja noch, aber versuch das mal mit 01 und 01

Code:
01 or 01 = 01     01 or 10 = 11
01  +  01 = 10     01  +  10 = 11
01 and 01 = 01     01 and 10 = 00
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
CalganX

Registriert seit: 21. Jul 2002
Ort: Bonn
5.403 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 17:56
Hi,
btw: 01+01 ist immer noch 02.

Chris
  Mit Zitat antworten Zitat
NicoDE
(Gast)

n/a Beiträge
 
#9

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 17:59
Zitat von Chakotay1308:
btw: 01+01 ist immer noch 02.
btw: 01 or 01 ist immer noch 01.
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.116 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Warum "OR" und nicht "AND" ?

  Alt 10. Jul 2004, 18:06
Moin alcaeus,

Zitat von alcaeus:
Diese Konstanten sind ja immer 2^n.
das sind sie oft, aber nicht immer.
Manchmal handelt es sich auch schon um Kobinationen, und wenn Du die dann mit + verbindest kann es zu "interessanten" Effekten kommen (wie Nico ja schon demonstriert hat).
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    


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 07:39 Uhr.
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