Forum: Compiler & IDEs C Verzweigung + Or korrekt?


von Mario (Gast)


Lesenswert?

hi,
es geht um folgenden Code:
1
if (x != (5 | 12))

ist das korrekt? Das Porgramm soll den Teil der kommt nur ausführen, 
wenn x ≠ 5 oder x ≠ 12 is. Also für alle x ≠ 5,12

von Grunz (Gast)


Lesenswert?

Nein.

if ( (x!=5) || (x!=12) )

von Rolf Magnus (Gast)


Lesenswert?

Das ist nicht korrekt so. Du hast eine falsche Vorstellung davon, was 
logische Verknüpfungen tun. Hier wird zunächst 5 und 12 per logischem 
ODER bitweise miteinander verknüpft. Das Ergebnis ist dabei 13. Damit 
wird x dann verglichen.

> Das Porgramm soll den Teil der kommt nur ausführen, wenn x ≠ 5 oder x ≠
> 12 is. Also für alle x ≠ 5,12.

Du meinst, wenn wenn x ≠ 5 und x ≠ 12 ist.

Du mußt es schreiben als:
1
if (x != 5 && x != 12)

von Mario (Gast)


Lesenswert?

wie denn nun ^^also es soll ausgeführt werden wenn x ≠ 5 und auserdem 
nicht wenn x ≠ 12 beides zugleich kommt nicht vor.

von Johannes M. (johnny-m)


Lesenswert?

Nö, das geht nicht. "5 | 12" ist ein konstanter Wert, und zwar in 
Binärschreibweise
1
    00000101
2
  | 00001100
3
  ----------
4
  = 00001101 = Dh bzw. 13d
Es wird oben also überprüft, ob x ungleich 13 ist. Da kannste aber auch 
gleich
1
if(x != 13)
2
{}
schreiben. Außerdem dürfte eine binäre VerODERung für Deine Zwecke 
sowieso ungeeignet sein. Was Du brauchst ist ein logisches UND (es 
soll ja weder 5 noch 12 sein), und das heiß in C "&&".

Du musst in dem Fall zwei getrennte Abfragen machen, also z.B.
1
if((x != 5) && (x != 12))
2
{}

von Mario (Gast)


Lesenswert?

ok danke da hab ich mich ja total vertan!

von Johannes M. (johnny-m)


Lesenswert?

Mario wrote:
> wie denn nun ^^also es soll ausgeführt werden wenn x ≠ 5 und auserdem
> nicht wenn x ≠ 12 beides zugleich kommt nicht vor.
Eben, es soll ausgeführt werden, wenn x nicht 5 UND nicht 12 ist...

von Peter D. (peda)


Lesenswert?

Mario wrote:
> es soll ausgeführt werden wenn x ≠ 5 und auserdem
> nicht wenn x ≠ 12

In C sieht das so aus:
1
if((x != 12) && !(x != 12))
oder gekürzt:
1
if(x == 12)


Peter

von Rolf Magnus (Gast)


Lesenswert?

> wie denn nun ^^also es soll ausgeführt werden wenn x ≠ 5 und auserdem
> nicht wenn x ≠ 12 beides zugleich kommt nicht vor.

Daß x weder 5 noch 12 (also nicht 5 und auch nicht 12) ist, kann sehr 
wohl vorkommen.
Die Bedingung "x ist nicht gleich 12 oder x ist nicht gleich 5" ist 
immer wahr, denn x ist immer entweder ungleich 12 oder ungleich 5 
(oder beides).

von Peter D. (peda)


Lesenswert?

Die erste Zeile muß natürlich:
1
if((x != 5) && !(x != 12))
heißen.

Peter

von Johannes M. (johnny-m)


Lesenswert?

@Peter:
Ich vermute mal, dass Mario da nur ein "nicht" zu viel hatte. Was 
anderes ist auch nicht wirklich sinnvoll. Ich denke mal, die 
Beschreibung in seinem ersten Posting ist die relevante...

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.