Hallo,
wie schreibt man in C ein logisches undoder? also nicht und, und nicht
oder, sondern beides zusammen. also nicht oder oder und oder und oder
und, sondern quasi und und oder oder oder und und.wie macht man sowas?
gibts dafür einen logischen operator?
<<kopfplatz>> <<grusel>>
danke!
Wie sieht denn die Logiktabelle eines "undoder" aus? Und worin
unterscheidet sie sich von einem "oderund"?
PS: Als TTLs gabs mit 7452&Co ICs, die ungefähr so hiessen.
Walter S. schrieb:> Leider 3 Tage zu spät ...
hä warum?
A. K. schrieb:> Wie sieht denn die Logiktabelle eines "undoder" aus? Und worin> unterscheidet sie sich von einem "oderund"?
Einen Unterschied zwischen und oder und oder und gibt es natürlich
nicht.
Wahrheitstabelle:
a b und oder undoder
--------------------------
w w w f w
w f f w w
f w f w w
f f f f f
irre ich mich da? ist das erste oder doch w?
Hallo
> a b und oder undoder> --------------------------> w w w f w> w f f w w> f w f w w> f f f f f>> irre ich mich da? ist das erste oder doch w?
Ich würde sagen das ist eher
und xor oder
undoder habe ich noch nie gehört.
Martin
> Du hast eine sehr exklusive Vorstellung vom oder, denn dein oder ist> kein oder doch dein und oder ist ein oder.
verstehe, also ist in wahrheit (!) oder das gleiche wie mein und oder
also brauchts kein und oder und es fehlt quasi mein oder, also ein oder,
das ein oder !und wäre gibt es nicht?
also ist diese wahrheitstabelle wahr?
a b und oder undoder
--------------------------
w w w w w
w f f w w
f w f w w
f f f f f
undoder = oder
ja?
> und xor oder
hä?
Maus schrieb:> irre ich mich da?
Massiv
siehe was Martin B gesagt hat.
Was du als "oder" bezeichnest ist ein XOR
Was du mit "undoder" bezeichnet hast ist ein einfaches "OR"
Also bei der Wahrheitstabelle ist dein "oder" falsch.
Und dein "undoder" ist allgemien ein oder.
Um auf deine Frage zurückzukommen:
In C wird es mit | gemacht:
bool a,b;
if (a | b)
{
}
Wahrheitstabelle:
a b AND XOR OR
--------------------------
w w w f w
w f f w w
f w f w w
f f f f f
Was davon möchtest Du?
In C gibt es noch die Unterscheidung zwischen logisch (0,1) und bitweise
(alle 8,16,32 oder 64 Bits).
Udo Schmitt schrieb:> Maus schrieb:>> irre ich mich da?> Massiv>> siehe was Martin B gesagt hat.>> Was du als "oder" bezeichnest ist ein XOR> Was du mit "undoder" bezeichnet hast ist ein einfaches "OR"
ah! ok, verstehe
exclusive or http://en.wikipedia.org/wiki/Exclusive_disjunction
xor kann man aber nicht für Variablen verwenden, oder doch?
icke schrieb:> Um auf deine Frage zurückzukommen:> In C wird es mit | gemacht:> bool a,b;> if (a | b)> {> }
na ich meinte ja das logische oder und nicht das bitweise oder, also
int a, b;
if (a || b)
{
}
Was ist der Unterschied zwischen if (a | b) und if (a || b) ??
icke schrieb:> In C wird es mit | gemacht:> bool a,b;> if (a | b)> {> }
Ja, auf jeden fall Lazy Evaluation vorbeugen, damit man ja auf jeden
fall nix rausoptimieren kann.
Meine güte, logisches oder in C sollte man immer per
> ||
machen, nur wenn das zweite eine Funktion ist, die auf jeden fall
ausgeführt werden muss sollte man | machen, aber das ist ohnehin
unsauber.
icke schrieb:> In C wird es mit | gemacht:> bool a,b;> if (a | b)
Das ist nicht korrekt. Boolsche Operatoren sind || (oder) und && (und)
Binäre operatoren sind | und &
Der TO braucht ein C Buch, das sind absolute Grundlagen.
Maus schrieb:> na ich meinte ja das logische oder und nicht das bitweise oder, also> int a, b;> if (a || b)> {> }>> Was ist der Unterschied zwischen if (a | b) und if (a || b) ??> a | b
macht bitweises oder von a und b und guckt DANN, ob das 0 ist oder
nicht.
> a || b
prüft dagegen beispielsweise garnicht mehr ob b wahr ist, wenn a schon
wahr ist, da der vergleich ja unnötig wäre. Das heißt lazy evaluation
und macht dein programm schneller.
Peter Dannegger schrieb:> Wahrheitstabelle:>> a b AND XOR OR> --------------------------> w w w f w> w f f w w> f w f w w> f f f f f>> Was davon möchtest Du?>> In C gibt es noch die Unterscheidung zwischen logisch (0,1) und bitweise> (alle 8,16,32 oder 64 Bits).
ah ja ok, logischerweise möchte ich das logische OR
Guest schrieb:>> a | b
> macht bitweises oder von a und b und guckt DANN, ob das 0 ist oder> nicht.>> a || b> prüft dagegen beispielsweise garnicht mehr ob b wahr ist, wenn a schon> wahr ist, da der vergleich ja unnötig wäre. Das heißt lazy evaluation> und macht dein programm schneller.
ah, ist das der einzige Unterschied?
Maus schrieb:> Guest schrieb:>> a | b>> macht bitweises oder von a und b und guckt DANN, ob das 0 ist oder>> nicht.>>> a || b>> prüft dagegen beispielsweise garnicht mehr ob b wahr ist, wenn a schon>> wahr ist, da der vergleich ja unnötig wäre. Das heißt lazy evaluation>> und macht dein programm schneller.>> ah, ist das der einzige Unterschied?
Bei ODER ist das alles, was mir bekannt ist.
Andererseits bei UND:
> 1 && 2 = wahr> 1 & 2 = 0 = falsch
Allerdings auch hier die Lazy Evaluation, wenn bei && der erste Term
falsch ist, wird der zweite einfach übersprungen.
Guest schrieb:>> 1 & 2 = 0 = falsch
? hä ? 1 ? 2 ? hä? was ?
Peter Dannegger schrieb:>> ah, ist das der einzige Unterschied?>> Nein.char a = 1, b = 2;>> if( a & b ){} // ist falsch>
warum?
Maus schrieb:> ? hä ? 1 ? 2 ? hä? was ?
In Deinem C-Buch, das Du ja ganz sicher schon nebenbei aufgeschlagen
haben wirst, steht, worin der Unterschied zwischen logischen und
bitweisen Verknüpfungen besteht.
glaub ich habs kapiert
http://en.wikipedia.org/wiki/Bitwise_operation#AND
sagt
"A bitwise AND takes two binary representations of equal length and
performs the logical AND operation on each pair of corresponding bits.
The result in each position is 1 if the first bit is 1 and the second
bit is 1; otherwise, the result is 0."
danke für das grundlagenlegen, hat spass gemacht. schönen tag noch!
A. K. schrieb:>> warum?>> Besorg dir ein C Handbuch. Jede weitere Mühe hier ist sinnlos.
das Lustige ist ja, dass in keinem Buch das Letzte Warum steht ... naja
aber wollen wir Humpty Dumpty mal schlafen legen ...
Guest schrieb:> macht bitweises oder von a und b und guckt DANN, ob das 0 ist oder> nicht.
das bitweise Oder 'guckt' gar nichts.
Das Ergebnis hat den gleichen Datentyp der beiden Operanden.
Nur wenn du das Ergebnis einem boolschen Ausdruck zuweist (explizit oder
implizit z.B. in einer Bedingung), dann ist der boolsche Ausdruck false
wenn das Ergebnis = 0 ist und true wenn es != 0 ist.
Garden schrieb:> Saukomisch hier ;-)
Schön daß du es komisch findest, ich finde es noch komischer, daß in
deinen Links nur logische Operatoren besprochen werden und du das
offenbar nicht mal merkst.
Also ist der Thread wohl bitter nötig, leider :-)
Udo Schmitt schrieb:> Garden schrieb:>> Saukomisch hier ;-)>> Schön daß du es komisch findest, ich finde es noch komischer, daß in> deinen Links nur logische Operatoren besprochen werden und du das> offenbar nicht mal merkst.> Also ist der Thread wohl bitter nötig, leider :-)
Der OP hatte nach logischen Operatoren gefragt.
Für Bitweise OPeratoren gibt es bei ET-Tutorials noch:
http://et-tutorials.de/1908/bitweise-manipulation/