Logische Verneinung

Status
Nicht offen für weitere Antworten.

Mane123

Bekanntes Mitglied
Hallo zusammen,

ich habe gerade angefangen, Java zu lernen. Ich bin gerade bei dem Thema logische Operatoren angekommen.
Mit der logischen Verneinung komme ich nicht ganz zurecht, ich habe mir mal folgende Wahrheitstabelle erstellt, um mir eine kleine Eselsbrücke zu bauen: (siehe Anhang)

Die ganz normal Wahrheitstabelle für das logische ODER verstehe ich.

Ich weiß zwar, dass die Ergebnisse bei der logischen Verneinung einfach umgedreht werden, aus true wird false, aber ich weiß nicht wie die obere Zeile beschriftet werden soll?

Könnt ihr mir da bitte kurz helfen?

Danke!

Viele Grüße
 

Anhänge

  • Java.doc.pdf
    25,2 KB · Aufrufe: 32

Mane123

Bekanntes Mitglied
Danke für die Antwort.

Naja, so schön hab ich's auch nicht, ich arbeite von 07.00 bis 18.00 und bilde mich danach noch weiter, da gibts auch schönere Sachen in der Freizeit. ;-)

Auf die Bezeichnung der Spalten bin ich auch schon gekommen, aber ich kapier das nicht so ganz,

ich habe ja dann:

Sonne scheint | es ist warm | ich ziehe kein tshirt an
true true false

Müsste es dann in dieser Konstelation nicht in der dritten Spalte "true" lauten?
 
Zuletzt bearbeitet:

Schandro

Top Contributor
Doppelte Verneinung:

Ich ziehe NICHT KEIN Tshirt an
ist dasselbe wie
Ich ziehe ein Tshirt an


naja, zumindest in der Informatik^^
 

faetzminator

Gesperrter Benutzer
[...] Ich weiß zwar, dass die Ergebnisse bei der logischen Verneinung einfach umgedreht werden, aus true wird false, aber ich weiß nicht wie die obere Zeile beschriftet werden soll?

Bei einem OR? :autsch:
bei einem OR müssen 1 bis n der n Terme wahr sein.
Code:
true | true // gibt true
true || false // gibt true
false || true // gibt true
false || false // gibt true
eine beliebige Aussage kannst du mit ! negativieren, als Beispiel
Code:
!true // false
!false // true
!(true || true) // false, da true || true true ergeben würde
...
 

Ebenius

Top Contributor
Ich finde schon die erste Tabelle ungünstig beschriftet, weil ich kein T-Shirt anziehe, wenn die Sonne bei -15°C scheint. Schöner wäre:
Code:
(A || B)
=====================================================
Habe ich meinen | Habe ich meinen | Ich kann mich
Personalausweis | Reisepass bei   | ausweisen.
bei mir? (A)    | mir? (B)        | (A || B)
-----------------------------------------------------
True            | True            | True
False           | True            | True
False           | False           | False
True            | False           | True

Code:
!(A || B) -- Das selbe wie: (!A && !B)
=====================================================
Habe ich meinen | Habe ich meinen | Ich kann mich
Personalausweis | Reisepass bei   | nicht ausweisen.
bei mir? (A)    | mir? (B)        | !(A || B)
-----------------------------------------------------
True            | True            | False
False           | True            | False
False           | False           | True
True            | False           | False
"Ich kann mich nicht ausweisen" könnte man auch ersetzen durch: "Mist. Die Polizei wird mich mit zur Wache nehmen."
Ebenius
 

Schandro

Top Contributor
Naja, so schön hab ich's auch nicht, ich arbeite von 07.00 bis 18.00 und bilde mich danach noch weiter, da gibts auch schönere Sachen in der Freizeit.
Achso, ich hab gedacht du wärst irgendein Schüler der hier seine Info-Hausaufgaben erledigt bekommen möchte.
 

Mane123

Bekanntes Mitglied
Nönö, die Schule hab ich schon ein paar Jährchen hinter mir, ich bin BWL'ler, und möchte mich nebenbei noch weiterbilden.
Mein Problem ist, wenn ich eine Aufgabe habe, die ich nicht ganz lösen kann, dann sitze ich ewg davor. Mit der Thematik beschäftige ich mich schon seit 22 Uhr. :(
 

Mane123

Bekanntes Mitglied
Danke für Eure Hilfe schonmal

ich habs jetz so ziemlich verstanden.

Ist das so, dass bei !(A || B) der Compiler die beiden Ausdrücke zuerst vergleicht, und dann zum Schluss das Ergebnies negitiert?

vorher:

true | true | true

und anschließend:

true | true | false


wie funktioniert das dann bei (!A && !B)?

Allerdings steht in meinem Lernbuch geschrieben, dass man immer die gesamten Ausdrücke mit einem "!" negitieren muss, da man ansonsten den Wahrheitswert einer Zahl umdrehen würde, was bei Java nicht möglich ist?

Danke!
 
Zuletzt bearbeitet:

Ebenius

Top Contributor
Ist das so, dass bei !(A || B) der Compiler die beiden Ausdrücke zuerst vergleicht, und dann zum Schluss das Ergebnies negitiert?
Richtig (der Compiler vergleicht normaler Weise natürlich nicht, die Maschine tut das zur Laufzeit, aber sonst richtig). Mit der Einschränkung, dass B gar nicht erst geprüft wird, wenn A schon wahr ist. Das ist der Unterschied zwischen '||' und '|'. Siehe [thread=1364]FAQ-Beitrag: Operatoren (Übersicht)[/thread].

wie funktioniert das dann bei (!A && !B)?
Erst wird A geprüft, dann negiert. Sollte der negierte Ausdruck false sein, dann wird der zweite Teil gar nicht geprüft; der selbe Unterschied zwischen '&&' und '&', siehe oben.

Allerdings steht in meinem Lernbuch geschrieben, dass man immer die gesamten Ausdrücke mit einem "!" negitieren muss,
Deswegen steht hier ja auch nicht mehr '||' sondern '&&'. "Nicht A oder B" ist das selbe wie "nicht A und nicht B".

da man ansonsten den Wahrheitswert einer Zahl umdrehen würde, was bei Java nicht möglich ist?
Den Wahrheitswert einer Zahl? Sowas wie "42" bedeutet dann "besonders unsicher, ob wahr oder unwahr"? ;)

Ebenius
 

Mane123

Bekanntes Mitglied
Danke!

in dem Buch steht geschreiben:

Der Operator ! muss jeweils vor der Klammer ( stehen. Andernfalls würden Sie versuchen, den Wahrheitswert einer Zahl umzudrehen - und das ist in Java nicht möglich.

!(5 <10) ==> klappt laut der oben stehenden Aussage

(!5 < !10) ==> klappt laut oben stehender Aussage nicht.

Dann ist ja die oben stehende Aussage falsch?

Viele Grüße
 

r0bbe

Mitglied
Jo genau (5<10) ist eine wahre Aussage durch die Negation mit ! wird sie dann falsch!

Eine Zahl besitzt keinen Wahrheitswert, die kann ja nicht richtig oder falsch sein!
Im obigen Beispiel geht es um den Wahrheitswert eines Ausdrucks, der kann ja richtig oder falsch sein.

edit:

Probier's doch einfach aus ;)
System.out.println(!(5 <10)); ==> false
Das andere:

Exception in thread "main" java.lang.Error: Unresolved compilation problems:
The operator ! is undefined for the argument type(s) int
The operator ! is undefined for the argument type(s) int
 
Zuletzt bearbeitet:

Ark

Top Contributor
Im obigen Beispiel geht es um den Wahrheitswert eines Ausdrucks, der kann ja richtig oder falsch sein.
Genauer: Es geht um den Wert eines booleschen Ausdrucks, der logisch wahr oder falsch sein kann.

Man schreibt für die Negation:
Java:
! boolescherAusdruck
wobei boolescherAusdruck ein beliebiger boolescher Ausdruck ist, z.B.
Java:
! b // falls b eine boolesche Variable ist
! true // ergibt false
! ! false // ergibt ebenfalls false
! b1 && b2 // vorsicht, hier wird erst negiert und dann UND-verknüpft!
! (5 > 3) // ergibt false und ist identisch mit 5 <= 3
Ark
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben