Hey ich hab hier beim Programmieren folgenden Ausdruck, den bei: int a =0; int b=11; a&& !b || a && b;Könnte das auch auf Grundlage der Mengenlehre lösen?

...komplette Frage anzeigen

3 Antworten

Könnte man, das wäre einfach 

if (a) {

mit deinen Beispielvariablen (a = 0, b = 11) würde das also zu "false" werden.

Oder etwas länger, mit Mengenlehre:

a ^ !b v a ^ b

= (a ^ !b) v (a ^ b) // UND (^) bindet stärker als ODER (v)

= a ^ (b v !b) // Regel 4

= a ^ 1 // Regel 6'

= a // Regel 5

Die durchnummerierten Regeln entsprechen der Nummerierung hier https://de.wikipedia.org/wiki/Boolesche_Algebra#Definition

&& ist ein logischer Operator, der auf "true" und "false" angewendet werden kann.

Was macht der bei 11?

Abgesehen davon kannst du das auch umformulieren

(a && !b) || (a && b) wäre

a && (b || !b)

also a

Dein Einwand gilt nicht für C und ähnliche Sprachen.

0
@danhof

Ja, das wird aber inzwischen als ganz schlechter Stil gesehen, sogar in C. Die aktuellen C++-Compiler bringen da sogar Fehler.

0
@Mikkey

Das ist kein schlechter Stil.

In C ist auch folgendes üblich:

if(pid = fork())
{}
else
{}
0
@Omnivore13

Wenn die Zuweisung funktioniert (true), dann...

Aber noch einmal: Was ist 11 bei einem boolschen Vergleich? Ist nur 0 false und alles andere true? Oder ist nur -1 true und alles andere false? Hab gerade keinen C-Compiler zurhand :-)

Ich wäre mit solchen Konstrukten sehr vorsichtig.

5 & 11 ist ja ok, aber eben was anderes als 5 && 11

0

Alles von 0 verschieden ist true.

Damit ergibt das folgendes:

false && !(true) || false && true

Also false || false

Würdest du diesen Ausdruck in eine Variable schreiben müsstest du 0 herausbekommen, sofern ich mich nicht verrechnet habe.

Was möchtest Du wissen?