C# mehrere vergleichsoperatoren

Sparkley

Ensign
Registriert
Feb. 2009
Beiträge
249
ich hab da noch eine aufgabe und würd gerne wissen ob die soweit richtig gedacht ist , habe die in einzelnen rechenschritte unterteilt.

n1 = 1 n2 = 17

1.) n1 > 0 && (n2 > 0 || n1 > n2) && n2 != 17
2.) true && (true || false ) && false
3.) true && true && false
4.) true && false
5.) = false

ist das so schritt für schritt korrekt gedacht oder hab ich einen denkfehler begangen?
 

Anhänge

  • 8ylmynxt.jpg
    8ylmynxt.jpg
    37,4 KB · Aufrufe: 329
Zuletzt bearbeitet:
Links nach rechts, wobei Klammern noch Vorrang haben.

Tipp: Sowas kann man auch googlen ;)
 
iks-deh schrieb:
Links nach rechts, wobei Klammern noch Vorrang haben.

von links nach rechts ist doch nur wenn man die gleichen operatoren benutzt oder? ich hab die aufgabe umgeschrieben sodass nun || zuerst vorkommt und danach erst &&

w - z == 90 || z == 11 && z > w;
-----true----------false--------false

und es kam immernoch true raus.


Laut dem link von TimeZoNe (http://msdn.microsoft.com/de-de/library/aa691323(v=vs.71).aspx) kommt es doch auf die Rangfolge dann an, wobei && einen höheren
Rang als || hat.

Anhang anzeigen 396551
 
Zuletzt bearbeitet:
Weißt du überhaupt für was || und && bedeuten :rolleyes:? Die Operatoren sind in diesem Fall gleichwertig.
 
Natürlich kommt immer noch "true", da "false || true -> true" ergeben.
Siehe Gesetze
 
Die Reihenfolge spielt in dem Sinne nur die Rolle, dass:
1) w - z == 90 || z == 11 && z > w;
"w - z == 90" wird ausgewertet und ergibt "true", da nun aber ein "||" folgt ist der Rest irrelevant (da "true || egal was -> true" ergibt).
2) z == 11 && z > w || w - z == 90;
In diesem Fall muss alles durchlaufen werden, da am Anfang ein "&&" steht und erst am Ende das "||".
 
Beim Parserbau spricht man hierbei auch von der Präzedenz (Precedence) und Assoziativität (Associativity) der Operatoren. JFYI. Gute Begriffe zum Googlen. ;)
 
Im Studium lernst du immer als erstes: IMMER Klammern !
Wenn es wirklich sein muss: http://msdn.microsoft.com/de-de/library/6a71f45d.aspx

w-z == 90 hat also Priorität. Der Rest ist egal da mit || verbunden, d.h. sobald eines true ergibt wird der linke Teil gar nicht erst geprüft. Das ist der Unterschied zum einfachen |. Ändere den linken Bereich mal ab, da müsste immer true vorkommen außer du machst links etwas mit höherer Priorität rein als das minus.

Z.b.:
x = 5
y = 3
z = 2

if (x == 4) && (y ==3) && (z ==2)....
-> False nach der ersten Klammer, die restlichen zwei werden nicht gecheckt da unnötig.
 
Zuletzt bearbeitet:
ich hab da noch eine aufgabe und würd gerne wissen ob die soweit richtig gedacht ist , habe die in einzelnen rechenschritte unterteilt.

n1 = 1 n2 = 17

1.) n1 > 0 && (n2 > 0 || n1 > n2) && n2 != 17
2.) true && (true || false ) && false
3.) true && true && false
4.) true && false
5.) = false

ist das so schritt für schritt korrekt gedacht oder hab ich einen denkfehler begangen?

Edit: das ergebnis false ist richtig, das habe ich überprüft aber ich weiss nicht ob meine denkweise zum richtigen ergebniss geführt hat.
 
Zuletzt bearbeitet:
so würde es ein Mensch vllt. Intuitiv machen. Aber beispielsweise werden Schritte 2-4 so nicht gemacht, da du dann quasi noch mal die Ergebnisse der Ausdrücke miteinander vergleichen würdest. Das ganze läuft ungefähr so ab:

1) n > 0 ist true, super, da mit && verknüpft wurde muss jetzt nur noch der rest true sein
2) (n2 > 0 || n1 > n2) auswerten: n2 > 0 ist true, also muss n1 > n2 nicht angeschaut werden, da mit || verknüpft. Danach kommt wieder ein &&, also weiter
3) n2 != 17 ist false
4) Ende des Ausdrucks -> false zurückgeben

black90 schrieb:
Im Studium lernst du immer als erstes: IMMER Klammern !
Das Studium will ich sehen in dem man ernsthaft lernt guten Code zu schreiben :)
 
Zuletzt bearbeitet: (Korrektur)
mal eine andere frage es gibt ja Namenskonventionen für Steuerelemente z.b button cmd , Textfeld fängt mit txt an usw usw...

ich hab nun ebend eine PictureBox eingebaut als Steuerelement , was schreibt man da hin?
 
Selbstverständlich. Da hab ich wohl am Ende nicht mehr nachgedacht.
 
Zuletzt bearbeitet:
Marguth schrieb:
IM link steht zwar VB allerdings werden afaik die Control Präfixe in C# ebenfalls so gehandhabt.
Der Link ist btw für VB 6. Das hat mit dem aktuellen VB für .NET deutlich weniger gemeinsam als man glauben möchte.
Heute sollte man meiner Meinung nach überhaupt keine Prefixe für Steuerelemente verwenden. Das ist ein Überbleibsel der Ungarischen Notation und die ist seit Jahrzehnten obsolet.

Ich benutze den Typ i. d. R. als Suffix, z. B.: okButton, ageTextBox, avatarPictureBox etc.
Zumindest für mich ist das auch sinnvoller, weil ich Controls meist nach ihrer Funktion und nicht nach ihrem Typ suche.
 
Zurück
Oben