Forum: Compiler & IDEs Was mach diese Funktion


von Bernd B. (behbeh)


Lesenswert?

Hallo,
j = (i<leng-1) ? 0 : 1;
Ich kenne zwar die Zuweisung "j=(i<leng-1)"
aber wie muss ich "? 0 : 1 " verstehen.
Heist das, das j nur 0 oder 1 werden kann?

Danke an die C-Profis..
Bernd

von Arne (Gast)


Lesenswert?

ist äquivalent zu:
1
if(i<leng-1) {
2
  j = 0;
3
}
4
else {
5
  j = 1;
6
}

Sollte aber in jedem C-Lehrbuch drin sein :-/

von Frank Zoll (Gast)


Lesenswert?

Halloe.

Das ganz ist eine verkürzte Schreibweise für eine IF THEN ELSE 
Bedingung.

Vor dem Fragezeichen steht die Bedingung. Zwischen Fragezeichen und 
Doppelpunkt steht der Wert der J zugewiesen werden soll, wenn diese 
Bedingung "WAHR" ist. Nach dem Doppelpunkt steht der Wert, der J 
zugewiesen werden soll wenn die Bedingung "UNWAHR" ist.

Der Vorteil ist, das die Variable J damit nicht mehr unbedingt eine Zahl 
sein muss. Man könnte damit genau so gut auch Strings zuweisen, was in 
"j=(i<leng-1)" nicht gehen würde.

Freundliche Grüße
Frank

von Klaus W. (mfgkw)


Lesenswert?

Frank Zoll schrieb:
> Das ganz ist eine verkürzte Schreibweise

geht aber noch deutlich kürzer :-)

von a no nym (Gast)


Lesenswert?

Klaus Wachtler schrieb:
> Frank Zoll schrieb:
>> Das ganz ist eine verkürzte Schreibweise
>
> geht aber noch deutlich kürzer :-)

Hm... j = !(i<leng-1); ???

von Karl H. (kbuchegg)


Lesenswert?

a no nym schrieb:
> Klaus Wachtler schrieb:
>> Frank Zoll schrieb:
>>> Das ganz ist eine verkürzte Schreibweise
>>
>> geht aber noch deutlich kürzer :-)
>
> Hm... j = !(i<leng-1); ???

kann man machen

Es geht auch

  j =  i > leng;

von a no nym (Gast)


Lesenswert?

Ach verflixt, wieder war dieser Karl-Heinz besser. :-)

von Stefan E. (sternst)


Lesenswert?

a no nym schrieb:
> Ach verflixt, wieder war dieser Karl-Heinz besser. :-)

Aber leider falsch. ;-)

von Karl H. (kbuchegg)


Lesenswert?

Stefan Ernst schrieb:
> a no nym schrieb:
>> Ach verflixt, wieder war dieser Karl-Heinz besser. :-)
>
> Aber leider falsch. ;-)

Magst du das näher ausführen
(Ich hab extra 20 Sekunden überlegt, ob es jetzt -1 heißen muss oder 
nicht. Gut, den Fall an den Wertüberläufen hab ich jetzzt nicht näher 
untersucht aber ansonsten müsste das stimmen)

Edit: Oh, und ich bin von Ganzzahldatentypen ausgegangen. Ich denke bei 
Variablennamen i, j und len ist das akzeptabel.

von Stefan E. (sternst)


Lesenswert?

Karl Heinz Buchegger schrieb:
> Stefan Ernst schrieb:
>> a no nym schrieb:
>>> Ach verflixt, wieder war dieser Karl-Heinz besser. :-)
>>
>> Aber leider falsch. ;-)
>
> Magst du das näher ausführen
> (Ich hab extra 20 Sekunden überlegt, ob es jetzt -1 heißen muss oder
> nicht. Gut, den Fall an den Wertüberläufen hab ich jetzzt nicht näher
> untersucht aber ansonsten müsste das stimmen)

Setzen wir doch einfach mal für leng und i das gleiche ein, z.B. 10:
!(10<9) vs 10>10

von Karl H. (kbuchegg)


Lesenswert?

Stefan Ernst schrieb:
> Karl Heinz Buchegger schrieb:
>> Stefan Ernst schrieb:
>>> a no nym schrieb:
>>>> Ach verflixt, wieder war dieser Karl-Heinz besser. :-)
>>>
>>> Aber leider falsch. ;-)
>>
>> Magst du das näher ausführen
>> (Ich hab extra 20 Sekunden überlegt, ob es jetzt -1 heißen muss oder
>> nicht. Gut, den Fall an den Wertüberläufen hab ich jetzzt nicht näher
>> untersucht aber ansonsten müsste das stimmen)
>
> Setzen wir doch einfach mal für leng und i das gleiche ein, z.B. 10:
> !(10<9) vs 10>10

Verdammt.
Ich such mir schon ein Eckchen zum schämen :-)

(und ich war mir so sicher, dass das -1 gegen das >= "gekürzt" werden 
kann, grummel grummel)

von Bernd B. (behbeh)


Lesenswert?

Hallo,
alles klar !!
Diese verkürzten Schreibweisen sind ja das a und o bei C.
Ich kannte diese Schreibweise mit dem ? Zeichen nicht. Jetzt ja..

Danke allen Antwortern..
Schoenes WE
Bernd

von Stefan E. (sternst)


Lesenswert?

Karl Heinz Buchegger schrieb:
> (und ich war mir so sicher, dass das -1 gegen das >= "gekürzt" werden
> kann, grummel grummel)

Wäre gegangen, wenn es +1 gewesen wäre.

Hier würde durch das "Kürzen vom =" ein -2 entstehen:
!(i<leng-1)  ->  i>=leng-1  ->  i>leng-2

Aber 100%ig gleichwertig wäre es mit "Kürzen" nie. Es gäbe immer einen 
Wert für leng, bei dem das Verhalten unterschiedlich wäre (wegen 
Über-/Unterlauf).

von Mark B. (markbrandis)


Lesenswert?

Bernd Bömer schrieb:
> Hallo,
> alles klar !!
> Diese verkürzten Schreibweisen sind ja das a und o bei C.

Eigentlich sind sie es nicht. Was am Ende zählt ist, was der Compiler 
daraus macht. Deswegen schreiben intelligente Programmierer den Code so, 
dass man ihn hinterher noch verstehen kann. Und nicht etwa sowas:

1
#define CHECKTHISOUT(x) (x==0?0:((x==1)?3:((x==2)?5:13)))

Ein reales Beispiel aus unserem Sourcecode aus der Arbeit. Kollegen, die 
sowas schreiben, gehört eigentlich von Rechts wegen eins in die Fresse. 
;-)

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.