Forum: Compiler & IDEs logisches undoder


von Maus (Gast)


Lesenswert?

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!

von Walter S. (avatar)


Lesenswert?

Leider 3 Tage zu spät ...

von (prx) A. K. (prx)


Lesenswert?

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.

von Silvan K. (silvan) Benutzerseite


Lesenswert?

Den Unterschied macht die doppelte Negierung aus ;-)

von Maus (Gast)


Lesenswert?

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?

von (prx) A. K. (prx)


Lesenswert?

Du hast eine sehr exklusive Vorstellung vom oder, denn dein oder ist 
kein oder doch dein und oder ist ein oder.

von Martin B. (martin_b97)


Lesenswert?

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

von Maus (Gast)


Lesenswert?

> 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ä?

von Udo S. (urschmitt)


Lesenswert?

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"

von Udo S. (urschmitt)


Lesenswert?

Es gibt kein "undoder"

von icke (Gast)


Lesenswert?

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)
{
}

von Peter D. (peda)


Lesenswert?

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).

von Maus (Gast)


Lesenswert?

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) ??

von Guest (Gast)


Lesenswert?

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.

von Udo S. (urschmitt)


Lesenswert?

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.

von Guest (Gast)


Lesenswert?

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.

von Maus (Gast)


Lesenswert?

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?

von Guest (Gast)


Lesenswert?

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.

von Peter D. (peda)


Lesenswert?

Maus schrieb:
> ah,   ist das der einzige Unterschied?

Nein.
1
char a = 1, b = 2;
2
3
if( a & b ){}   // ist falsch
4
5
if( a && b ){}  // ist wahr

von Maus (Gast)


Lesenswert?

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?

von amateur (Gast)


Lesenswert?

Ich würde ganz einfach ein "inklusive Immer" verwenden.

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

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.

von (prx) A. K. (prx)


Lesenswert?

Maus schrieb:
> warum?

Besorg dir ein C Handbuch. Jede weitere Mühe hier ist sinnlos.

von Maus (Gast)


Lesenswert?

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!

von Maus (Gast)


Lesenswert?

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    ...

von Udo S. (urschmitt)


Lesenswert?

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.

von au Backe! (Gast)


Lesenswert?

Seid ihr eigentlich bescheuert?

von (prx) A. K. (prx)


Lesenswert?

Ja, klar. Noch so einer, der zum Lachen immer in den Keller geht...

von Garden (Gast)


Lesenswert?

Saukomisch hier ;-)

Ne, aber ml im Ernst:
http://et-tutorials.de/2493/analog-vs-digital/

von Garden (Gast)


Lesenswert?


von Udo S. (urschmitt)


Lesenswert?

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 :-)

von Maus (Gast)


Lesenswert?

A. K. schrieb:
> Ja, klar. Noch so einer, der zum Lachen immer in den Keller geht...

? hä ? wieso

von Garden (Gast)


Lesenswert?

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/

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.